2009-11-19 1 views
2

내가 LISP에서 일부 코드를 포팅하고있어,하지만 난 단지를 생략하고 의견을 말을 구현할 수 물론이 부분 (분명히 그 MIT-구성표입니다)리스프 코드 설명

(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이 단어를 반환 할 것으로 기대하지 않습니다.

답변

2

나는 아무 계획 프로그래머는 아니지만, 하나를 취할 선언에도 불구하고, 매개 변수없이 호출 받고있는 것으로 나타납니다 문자 반면에 read-charsource

end-of-sentence?에서 소비되고있는 것으로 보인다. (? nil) 내가

가 쌍 (end-of-sentence?) (c-g-iter (+ num 1)) 당신이 스위치 또는 간결처럼 생각할 수 cond에 대한 매개 변수이며,이 차례로 호출 기능은 시스템이 지정되지 않은 매개 변수를 제공 무엇에 관대하다고 가정하는 경우/다른 사람; 첫 번째 부분은 테스트 (end-of-sentence?)이고, 두 번째 것은 실제로 실행될 내용입니다. (c-g-iter (+ num 1))

1

내 음성을 코러스에 추가하기 만하면됩니다. 어쩌면 나는 약간 통찰력을 제공 할 수있다.

이 기능에있는 일부 기능은 char-exist-last?initial?과 같은 표준 mit-sheme이 아닙니다. (1) 그래서 어떻게 할 수 있는지 알 수 없습니다.

그 말은, end-of-sentence?은 문자열 (word, 그래서 단어 여야 함)을 취하고 마지막 문자가 '!', '?'인 경우 true를 반환한다고 생각합니다. 또는 '.'이며, 단어 뒤의 다음 문자는 공백, 개행 문자 또는 탭 문자입니다. 또한 intial을 보면 문장의 첫 번째 단어가 아닐 수 있습니다 (예 : 'A.'는 true를 반환하지 말고 'A dog.'은 포함해야합니다.)

read-char 실제로 ' 소비 문자 '- "입력 포트에서 사용 가능한 다음 문자를 반환하고 입력 포트를 업데이트하여 다음 문자를 가리 킵니다." (MIT-Scheme input procedures을 얻기 위해 googled 'read-char mit scheme')

char-ready?은 다음과 같이 작동합니다. "문자가 입력 포트에 준비되어 있으면 #t를 반환하고 그렇지 않으면 #f를 반환합니다."

희망이 적어도 계몽!

(1) MIT-Scheme Reference