2012-05-02 7 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の、および身体。 私は2番目の部分を解析したいと思う(意味は、すべての用語が "let"の表現から1つの単語になるというリストを作ってみたい)が、試しても問題ない。

私はdrRacket方式を使用しています。

長いメッセージをおかけして申し訳ありません。

+1

's/let/letrec /'; pヒント:これはYコンビネータです。 – leppie

+0

私はあなたの答えを理解していないと言ったらあなたは私を許しますか? : 私はちょっとスキームを新しくしています... – matmiz

+0

それは答えではありません、それはコメントです:)最初の部分は冗談です(実際の解決策ですが、 'let'を' letrec'に置き換えるだけです)。 – leppie

答えて

1

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

関連する問題