我移植從LISP一些代碼,但我被困在這部分(顯然這是麻省理工學院的方案)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)))
當然我可以只跳過和實施意見說什麼它確實,但只是想確保背景中沒有魔術發生。所以...這個功能如何工作 - 它實際上在哪裏閱讀角色?它是否和我想象的一樣醜陋,是否會在end-of-sentence?
的最後一次檢查中消耗字符作爲副作用?還是char-ready?
實際上讀了什麼?
但是再次 - (end-of-sentence?) (c-g-iter (+ num 1))
是什麼意思,因爲我不期望c-g-iter
返回一個單詞。