Pas mal de problèmes de syntaxe et de maîtrise de l'environnement de travail dans ce TP.
Vous manquez de pratique. Il faut absolument vous entraîner chez vous.
Attention à l'indentation, la casse. Sachez lire le debugger : parse error, not in scope, etc.
Beaucoup ne semblent jamais être allés en amphi et s'évanouissent en voyant la fonction filtre
ou bien l'utilisent n'importe comment sans réfléchir, sans écrire sur papier sa spécification...
Un(e) informaticien(ne) ne doit pas être un(e) bricolo : rigueur, esprit scientifique mais aussi imagination.
Vous créez de nouveaux mondes, certes, mais veillez à pouvoir y survivre en étudiant
avant les éventuels dangers.
Haskell
-- pragma pour passer des options au compilateur : {-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-} module Tp1 where -- pour faire des tests sur des ensembles infinis ou très grands : import Test.QuickCheck -- Définit un magma sur un ensemble d'objets de type t -- muni de la LCI <+> class Magma t where (<+>) :: t -> t -> t -- Par exemple (Integer,+) est un magma: instance Magma Integer where (<+>) = \x y -> x + 2*y -- (String, ++) est un magma instance Magma String where (<+>) = (++) -- test magma =? magma associatif sur un triplet -- particulier d'éléments de type t : -- on travaille dans la classe Magma donc on peut utiliser -- la loi génériquement représentée par <+> isMagmaAssociatif :: (Magma t, Eq t) => (t,t,t) -> Bool isMagmaAssociatif (a,b,c) = (a <+> b) <+> c == a <+> (b <+> c) -- exo 1.3 data Truc = A | B | C | D deriving(Show, Eq) lesTrucs = [A,B,C,D] lesTripletsTrucs = [(x,y,z) | x <- lesTrucs, y <- lesTrucs, z <- lesTrucs ] (<*>) :: Truc -> Truc -> Truc (<*>) A A = B (<*>) A B = C (<*>) A C = D (<*>) A D = A (<*>) B A = D (<*>) B B = A (<*>) B C = B (<*>) B D = C (<*>) C A = A (<*>) C B = B (<*>) C C = C (<*>) C D = D (<*>) D A = C (<*>) D B = D (<*>) D C = A (<*>) D D = B instance Magma Truc where (<+>) = (<*>) -- What is zis ??? maporumLeviosa = map isMagmaAssociatif lesTripletsTrucs test1 = all isMagmaAssociatif lesTripletsTrucs test2 = any isMagmaAssociatif lesTripletsTrucs -- Une fonction filtre : qu'est-ce que ce foncFiltre ? filtre :: (a -> Bool) -> [a] -> [a] filtre foncFiltre [] = [] filtre foncFiltre (t:q) = if (foncFiltre t) then t : (filtre foncFiltre q) else filtre foncFiltre q