Bonjour, je débute en scheme et suis un peu dérouté (dégouté ? ;-)) par la syntaxe... Je cherche à comprendre ce code.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.