11.07.2015 Views

Programmation fonctionnelle (Haskell)

Programmation fonctionnelle (Haskell)

Programmation fonctionnelle (Haskell)

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Succ : : Nat −> NatOn pourrait définir l’addition par pattern matching :(+) : : Nat −> Nat −> Natm + Zero = mm + Succ n = Succ (m + n )Etant donné l’addition, on pourrait d’abord définir la multiplication et ensuitel’exposant :( ∗ ) : : Nat −> Nat −> Natm ∗ Zero = Zerom ∗ Succ n = (m ∗ n ) + m( ˆ ) : : Nat −> Nat −> Natm ˆ Zero = Succ Zerom ˆ Succ n = (m ˆ n ) ∗ mOn peut introduire les opérateurs de comparaison en déclarant Nat une instancede Eq et de Ord :instance Eq Nat whereZero == Zero = TrueZero == Succ n = FalseSucc m == Zero = FalseSucc m == Succ n = (m == n )instance Ord Nat whereZero < Zero = FalseZero < Succ n = TrueSucc m < Zero = FalseSucc m < Succ n = (m < n )Alternativement, il suffit de déclarerdata Nat = Zero | Succ Natderiving (Eq,Ord)Il reste la définition de la soustraction :(−) : : Nat −> Nat −> Natm − Zero = mSucc m − Succ n = m − nCette définition utilise pattern matching sur les deux arguments. La fonctionest partielle. On a par exemple (Zero − Succ Zero) = ⊥.N’oublions pas que ⊥ ∈Nat et, par conséquant, Succ ⊥, Succ (Succ⊥), etc.appartiennent toutes à Nat. Elles représentent différentes valeurs indéfinies. Natcontient encore une autre valeur différente de toutes les autres, c’est à dire lavaleur “infinie” que l’on pourrait définir comme14

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!