Utilisation de List dans "Yet Another Haskell Tutorial" [résolu] - Langages fonctionnels - Programmation
Marsh Posté le 01-10-2007 à 10:55:56
Ah, j'ai oublié de le noter hier soir, mais la variante avec crochet (listLength [42]) me sort une erreur type:
"Couldn't match expected type 'List t'
agains inferred type '[a]'"
(désolé, je ne me souviens plus du message exact et n'ai pas de quoi testé ici, j'éditerais si je peux installer ghc ici)
Marsh Posté le 01-10-2007 à 23:19:34
J'ai trouvé \o/
Verbosité me voilà:
Code :
|
Marsh Posté le 03-10-2007 à 11:51:40
En fait ton problème n'est pas avec l'utilisation de listLength, mais avec la construction d'une List:
Un objet de type List est composé:
-> De Nil
-> Ou d'un Cons (item, List)
Donc le dernier item d'un objet List doit toujours être un Nil
(Cons 42) ne crée en fait pas un objet List t, mais une fonction (List t -> List t) (essaies :t Cons 42 dans ghci, et compare à :t Cons 42 Nil, ensuite tu peux regarder le type de listLength)
Marsh Posté le 03-10-2007 à 12:07:02
Merci, c'est en fait ce que j'ai compris après avoir justement fais ce que tu recommandes (Ca m'a permis de percuter, que sans "marqueur de fin", l'expression était incomplète.)
Ceci dit, c'était un peu idiot comme problème, en relisant une ou 2 fois de plus, j'aurais dû trouver
Marsh Posté le 03-10-2007 à 12:11:42
IrmatDen a écrit : Merci, c'est en fait ce que j'ai compris après avoir justement fais ce que tu recommandes (Ca m'a permis de percuter, que sans "marqueur de fin", l'expression était incomplète.) |
Si t'as jamais utilisé de langages fonctionnels auparavant, et jamais été un grand fan d'implémenter des listes chaînées, c'est pas nécessairement flagrant
Marsh Posté le 03-10-2007 à 12:21:37
Bien vu; c'est la première fois que je touche à ce genre de langage, et les listes chaînées, j'ai dû coder ça une fois ou 2 dans un exo en débutant le C++ (et le C à l'école *beurk*), depuis, je fais confiance aux libs bien écrites
Marsh Posté le 03-10-2007 à 12:36:16
Juste par curiosité mal placée... tu utilise Haskell dans quel domaine ?
Marsh Posté le 03-10-2007 à 16:07:03
Personnellement, c'est juste pour apprendre en ce moment; quand j'aurais fini quelques tutos, je verrais ce pour quoi je suis motivé (probablement du graphisme à première vue, mais un peu de tests pour voir comment en faire un serveur, bref c'est flou).
Marsh Posté le 01-10-2007 à 01:45:37
Salut,
Ca commence à faire un bon moment que je galère sur un truc tout con (enfin, j'ai l'impression). C'est à propos du paragraphe 4.5.3 du tuto cité dans le sujet ("Recursive Datatypes" ).
L'auteur défini un type List et une fonction listLength de la façon suivante:
Or, c'est là que je me sens particulièrement naze, impossible d'utiliser listLength (sur autre chose que Nil s'entend).
Dans toutes les définitions de type précédentes, ça allait, mais sur ce List, rien à faire.
Bien sûr, j'ai tenté le -logique me semble-t-il- listLength (Cons 42), et puis à l'aveuglette (c'est mal je sais, mais là je comprends vraiment pas) des variantes avec [], en remplaçant Cons par List... et d'autres manips que je trouve illogique comparé aux exos de types précédent.
Bref, au secours, comment utiliser listLength avec ce type List svp?
Edit: pardon, j'oubliais le message d'erreur qui va avec:
*DataTypes> listLength (Cons 42)
<interactive>:1:12:
Couldn't match expected type `List t'
against inferred type `List t1 -> List t1'
In the first argument of `listLength', namely `(Cons 42)'
In the expression: listLength (Cons 42)
In the definition of `it': it = listLength (Cons 42)
Message édité par IrmatDen le 01-10-2007 à 23:19:51