|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 3 ![]() |
bonjour,
je débute en haskell et j'ai acheté le livre "programming in haskkel". au chapitre sur les parsers il y a le code recursif sur les chaines dont je n'arrive pas a comprendre comment il se déroule. Voici le code Code :
comment le return (x:xs) est atteint? j’essaie de décomposer en étape l'exemple suivant: mais je ne vois pas comment le résultat aboutit a [("to","pi")]. si quelqu'un peut dérouler l'exemple. Merci. |
||
|
|
00
|
|
|
#2 | ||||||
|
Membre confirmé
![]() ![]() Inscription : décembre 2005 Messages : 172 ![]() |
Je n'ai pas lu le livre "Programming in Haskell", mais j'imagine qu'il doit introduire la notion de monade avant de détailler ce parseur. En tout cas, c'est un concept que tu devras apprendre à maîtriser pour profiter pleinement de ce langage. Si ton livre n'est pas assez clair sur ce sujet, tu peux aussi jeter un oeil sur la version en ligne de Real World Haskell (il y a d'ailleurs également un exemple de parseur dedans).
En attendant, on peut se contenter de dire que les monades constituent un certain formalisme à adopter pour un type (et on l'adopte concrètement en faisant d'un type une instance de la classe Monad) permettant en échange de bénéficier d'un tas de facilités du langage, que ce soit en terme de syntaxe avec la notation 'do' ou de réutilisation de fonctions dédiées aux monades. Plus généralement, les monades sont la forme que prennent (assez) naturellement les types dans la programmation fonctionnelle de haut niveau (dans le sens fonction de fonction). Pour en revenir au sujet de ton message, voici comment tu pourrais réécrire la fonction string. Tout d'abord en "désugarisant" sa définition (la syntaxe 'do' au style impératif n'est que du sucre syntaxique) : Code :
Code :
Code :
|
||||||
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 3 ![]() |
Merci pour la réponse.
Bon j'ai encore du chemin pour comprendre le 3eme code. Dans le 2eme code (string3) mon erreur est d'oublier le type de String qui est String->Parser String aussi je suppose que le raisonnement cidessous est faux: String (xs) = String (y:ys) = char y >> string ys >> return (y:ys) Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Membre confirmé
![]() ![]() Inscription : décembre 2005 Messages : 172 ![]() |
Ton code sort des variables (y, z, etc.) de nulle part, ce qui t'induit ensuite en erreur :
Code :
|
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 3 ![]() |
effectivement c'est plus parlant.
merci. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com