2012-02-14 29 views
3

目標:實施unfold函數只使用兩個參數。在計劃中展開功能

的參數:

  • 第一個參數爲f這需要一些類型I和返回nil或缺點對的兩個元件(第一這兩個中的一個初始值是下一個元素進入一些類型A的列表以及某種類型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)) (= i(0)) (cons i(+ i 5)))) (展開式升序( - 100)) – 2012-02-15 00:21:57

+0

您的情況存在'(= i( - i))',相當於'(= i 0 )',所以它停在0,最後一個是'-5'。 – 2012-02-15 00:28:51

+0

我想我只需要做(=我(105))。我只是認爲我可以定義這個函數,使它能夠打印所有數字,包括最初的負數。 – 2012-02-15 00:31:59