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)) 

手順は、「let」、letの、およびbodyの3つの部分からなる引用として示されています。2番目の部分を解析したい(つまり、その中のすべての用語が「let」の表現から1つの単語になるリストを作成したい)が、何を試してもうまくいかないようです。

私はdrRacketスキームを使用しています。

長いメッセージをありがとう、ごめんなさい。

4

1 に答える 1

1

この変換の方法を説明しているhttp://www.dreamsongs.com/Files/WhyOfY.pdfをお読みください。あなたの割り当ては、プロシージャアプリケーションだけで再帰を行うための古典的なプログラミング言語の手法です。

于 2012-05-02T17:08:17.150 に答える