Bonsoir,
J'aimerais retranscrire en Haskell les définitions ci dessous ( code Scala )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 type Set = Int => Boolean def contient(s: Set, elem: Int): Boolean = s(elem) def singl (elem: Int): Set = (n: Int) => n == elem def union(s: Set, t: Set): Set = (n: Int) => s(n) || t(n)
1) Définition du type ensemble ( de nombres entiers ) en tant que fonction ( dans Boolean )
2) Définition de l'inclusion
3) Définition d'un singleton {elem}
4) Définition de l'union
Pour les 3 premières étapes, je propose
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 type Set = (Int -> Bool) contient :: Set -> Int -> Bool contient set el = set el singl :: Int -> Set singl ele = (== ele)
ce qui marche bien, comme on peut le vérifier :
False
Code : Sélectionner tout - Visualiser dans une fenêtre à part contient (singl 2) 3
True
Code : Sélectionner tout - Visualiser dans une fenêtre à part contient (singl 2) 3
Par contre je n'arrive pas à définir l'union, j'ai essayé :
ce qui donne le message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 union :: (Set -> Set) -> Set union s1 s2 = (λn -> (contient s1 n)||(contient s2 n) )
Pattern syntax in expression context: λn -> (contient s1 n) || (contient s2 n)
Le problème est que je ne connais pas l'équivalent de "(n: Int) => " de Scala, qui introduit un entier n quelconque.
Merci d'avance si vous avez une idée...
Partager