Question de débutant (call-with-input-file)
Bonjour, je débute en scheme et suis un peu dérouté (dégouté ? ;-)) par la syntaxe... Je cherche à comprendre ce code.
Code:
1 2 3 4 5 6 7 8 9 10 11
| (call-with-input-file "test1.scm"
(lambda (p)
(let f
((x (read p))
)
(if (eof-object? x)
'()
(cons x (f (read p))))
)
)
) |
Je vois le principe du lambda appelé directement par call-with-input-file... Qui fait un truc du genre
open
yield -> le code lambda
close
Par contre, je pige pas trop ce qui suit :
- Que représente le f du let ? (Puisque ce que les données lues se trouvent dans x)
- A la fin, quand on détecte un EOF on retourne une liste vide mais dans le cas contraire (la lecture continue) que fait le cons x ? Pourquoi y a-t-il encore un read ??
J'imagine aussi que le nil ou le cons sont retourné à l'appelant, et que l'appelant procède à un boucle tant qu'on lui retourne pas nil...
Merci de m'éclairer... Je cherche des exemples en scheme simples à comprendre, pas du tout orienté vers les maths, du coup je me tourne vers les fichiers, les sockets, etc.