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:
Code :
data List a = Nil
| Cons a (List a)
listLength Nil = 0
listLength (Cons x xs) = 1 + listLength xs
|
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:
Citation :
*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