Je portage du code de Lisp, mais je suis resté bloqué dans cette partie (apparemment, c'est pour mit-scheme)explication du code Lisp
(define (end-of-sentence? word)
(and (or (char-exist-last? word '#\.)
(char-exist-last? word '#\!)
(char-exist-last? word '#\?))
(not (initial? word))
(or (eq? (peek-char) '#\Space) ;;peek- so test for linefeed isn't affected
(eq? (peek-char) '#\n) ;;note- test for space isn't neccessary
(eq? (read-char) '#\t))))
;;counts the number of sentences in a given file and
;;stops at the given number
;;returns true once at that position, returns error if eof
(define (goto-sentence? file stop)
(define (c-g-iter num)
(cond ((= num stop)
#t)
((end-of-sentence?)
(c-g-iter (+ num 1)))
((not (char-ready?))
(error "EOF reached, number to large in goto-sentence?: " stop))
(else
(c-g-iter num))))
(begin
(open-path file)
(c-g-iter 1)))
Bien sûr, je pourrais simplement ignorer cela et mettre en œuvre ce que disent les commentaires c'est le cas, mais je voulais juste être sûr qu'il n'y a pas de magie en arrière-plan. Alors ... comment cette fonction fonctionne-t-elle? Où lit-elle réellement les personnages? Est-il aussi moche que je pense et consomme-t-il les caractères comme un effet secondaire dans le dernier contrôle end-of-sentence?
? Ou le char-ready?
lit-il quelque chose?
Mais encore une fois - que signifie (end-of-sentence?) (c-g-iter (+ num 1))
, car je ne m'attends pas c-g-iter
à retourner un mot.