2013-03-26 68 views
0

我是相當新的計劃和,我想了一個辦法,立方體給定的列表中的每個數字遞歸到目前爲止,這是我所:方案:功能援助

(define (cube-it-list lst) 
    (cond [(empty? lst) empty] 
     [else (cons (cube-it (first lst)) 
        (cube-it-list (rest lst)))])) 

但每次我執行該程序我得到一個錯誤,我不知道爲什麼這是任何人都可以幫助或想出一個更好的更有效的方式來做到這一點。

+0

您得到的錯誤是什麼?發佈它作爲問題的一部分 – 2013-03-27 00:19:55

回答

1

您是否定義了函數cube-it?當我做了,你的代碼爲我工作。

在任何情況下,在Scheme中都有一個構造,正是這樣的事情:通過對每個元素應用轉換使一個列表脫離另一個列表。這就是所謂的地圖:

(map cube-it '(1 2 3 4 5)) 
=> '(1 8 27 64 125) 

你已經基本上徹底改造在這裏,除了地圖不侷限於單一的變換操作 - 你通過它,你要作爲第一個參數使用的功能。 (請注意,如果您已被特別告知實施遞歸解決方案,您應該堅持原始代碼。map將在內部使用遞歸,但使用map意味着您自己的代碼不需要涉及任何對於這種情況遞歸。)

2

該功能看起來很好,也許問題出在cube-it過程或您調用它的方式。例如,這個工程:

(define (cube-it x) 
    (* x x x)) 

(define (cube-it-list lst) 
    (cond 
    [(empty? lst) 
    empty] 
    [else 
    (cons (cube-it (first lst)) 
      (cube-it-list (rest lst)))])) 

(cube-it-list '(1 2 3 4 5)) 
=> '(1 8 27 64 125) 

至於「更好更有效的方式來做到這一點」,堅持@ SVK的答案,並map在輸入列表中,這是解決這類問題,涉及到習慣的方法將函數應用於輸入列表中的每個元素,以生成包含結果的輸出列表:

(map cube-it '(1 2 3 4 5)) 
=> '(1 8 27 64 125)