Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3240 connectés 

  FORUM HardWare.fr
  Programmation
  Langages fonctionnels

  [résolu] Utilisation de List dans "Yet Another Haskell Tutorial"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] Utilisation de List dans "Yet Another Haskell Tutorial"

n°1617209
IrmatDen
Posté le 01-10-2007 à 01:45:37  profilanswer
 

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 :
  1. data List a = Nil
  2.            | Cons a (List a)
  3. listLength Nil = 0
  4. 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
mood
Publicité
Posté le 01-10-2007 à 01:45:37  profilanswer
 

n°1617277
IrmatDen
Posté le 01-10-2007 à 10:55:56  profilanswer
 

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)

n°1617660
IrmatDen
Posté le 01-10-2007 à 23:19:34  profilanswer
 

J'ai trouvé \o/
Verbosité me voilà:

Code :
  1. listLength $ Cons 42 $ Cons 53 $ Cons 24 $ Cons 51 Nil

n°1618334
masklinn
í dag viðrar vel til loftárása
Posté le 03-10-2007 à 11:51:40  profilanswer
 

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)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1618341
IrmatDen
Posté le 03-10-2007 à 12:07:02  profilanswer
 

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 :/

n°1618343
masklinn
í dag viðrar vel til loftárása
Posté le 03-10-2007 à 12:11:42  profilanswer
 

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.)
Ceci dit, c'était un peu idiot comme problème, en relisant une ou 2 fois de plus, j'aurais dû trouver :/


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 :p


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1618345
IrmatDen
Posté le 03-10-2007 à 12:21:37  profilanswer
 

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 :D

n°1618350
utopiah
Knowledge is power
Posté le 03-10-2007 à 12:36:16  profilanswer
 

Juste par curiosité mal placée... tu utilise Haskell dans quel domaine ?

n°1618490
IrmatDen
Posté le 03-10-2007 à 16:07:03  profilanswer
 

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).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Langages fonctionnels

  [résolu] Utilisation de List dans "Yet Another Haskell Tutorial"

 

Sujets relatifs
[Résolu] Javascript Rajout de td en chaine dans un tableaureq sql Max(id) + GROUP/[RESOLU]
Utilisation de deux versions de drivers différents (8i & 9i)Utilisation des web services avec Visual Studio 2008 (.NET frwk 3.5)
[RESOLU] Comment faire un echo sans retour chariot sous unix ?[Résolu] utiliser une table tempo pour lire un fichier .xls
[RESOLU] Probleme pour augmenter un DIV en fonction d'un autre[RÉSOLU]pre-loading - ActionScript 3.0
[Résolu] IE "error not implemented"[Résolu] DataBinding d'un DropDownList sur un GridView
Plus de sujets relatifs à : [résolu] Utilisation de List dans "Yet Another Haskell Tutorial"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR