2012-05-02 6 views
2

잘못된 쓰여진 재귀 프로 시저를 구문 분석하고 수정해야하는이 임무가 있습니다. 예를 들어 : 이 :하나의 큰 따옴표를 문자열 /리스트의 스키마로 변환합니다.

(let ((fib (lambda (n) 
      (cond ((= n 0) 1) 
         ((= n 1) 1) 
         (else (+ (fib (- n 1)) (fib (- n 2)))))))) 
      (fib n)) 

이로 변환 :

(let ((fib (lambda (n fib-param) 
        (cond ((= n 0) 1) 
           ((= n 1) 1) 
          (else (+ (fib-param (- n 1) fib-param) 
             (fib-param (- n 2) fib-param))))))) 
    (fib n fib)) 

절차가 3 개 부품 업체로 주어진다을 다음이 "하자"는이하자, 몸의. 두 번째 부분을 구문 분석하고 싶습니다. (의미는 모든 단어가 "let"의 표현에서 하나의 단어가됩니다) 목록을 만들고 싶습니다.하지만 시도해도 문제가 해결되지 않는 것 같습니다. .

나는 drRacket 체계를 사용하고 있습니다.

긴 메시지를 보내 주셔서 감사 드리며 죄송합니다.

+1

's/let/letrec /'; p 힌트 : 이것은 Y 결합 자입니다. – leppie

+0

내가 당신의 대답을 이해하지 못했다고 말하면 용서해 주시겠습니까? : D 나는 다소 새로운 계획을 세운다. – matmiz

+0

그것은 대답이 아니다, 그것은 주석이다 : 첫 부분은 농담이다. (단지 let을 letrec로 바꾼다. – leppie

답변

1

이 변환을 수행하는 방법을 설명하는 http://www.dreamsongs.com/Files/WhyOfY.pdf을 읽어보십시오. 숙제는 프로 시저 응용 프로그램만으로 재귀를 수행하는 고전적인 프로그래밍 언어 기술입니다.