2012-02-14 9 views
3

目標:unfold関数は2つの引数のみを使用して実装します。計画内で展開機能を展開する

引数:

  • 最初の引数は、いくつかのタイプIの初期値をとり、F、リターンゼロ又は二つの要素の短所対である(これら二つの第一は、次の要素すなわちタイプAのリストと、タイプIの次の初期値に入る)。
  • 第二引数には、いくつかのタイプIの初期値であり、リターンは、これは私がこれまで持っていると私はそれが機能しない理由を確認していないものです

タイプAの項目のリストであります:

(define (descending i) 
    (if (= i 0) 
    (list) 
    (cons i (- i 1)))) 

(define nil (list)) 

(define (unfold f init) 
    (if (eq? (f init) '()) 
    (list) 
    (cons init (unfold f (f init))))) 

(unfold (descending 5)) 

'(5 4 3 2 1) 

に評価する必要がありますこれは結果ではなく、あるべきです。私は間違って何をしていますか?

答えて

5

まず、(unfold descending 5)である必要があります。その後、fはペアを生成し、両方のコンポーネントを使用します。

(define (unfold f init) 
    (if (eq? (f init) '()) 
    (list) 
    (cons (car (f init)) (unfold f (cdr (f init)))))) 
+0

私は見る!ありがとう!また、 '(-100 ... 100)を返す昇順関数を定義したい場合、なぜ次のコードが-5で停止するのかわかりません:(define(ascending i) (if(= i( - i)) (リスト) (cons i(+ i 5)))) –

+0

あなたの状態に '(= i( - i))'があります。 ) 'であるので、0で停止し、最後にコンストされるのは' -5'です。 –

+0

私はちょうど(= i(105))しなければならないと思います。私はちょうど私が最初のネガを含めてすべての数字を印刷するように関数を定義できると思った。 –