2014-06-12 83 views
0

我想使用First和Rest遍歷球拍中的數字列表,但我不確定我是否正確使用這些函數,因爲代碼無法正常工作。如何使用First和Rest功能?

(define cubed 
    (lambda (a) 
    (* a a a))) 

(define (all-elements-cubed a) 
    (cond 
    [(empty? a) empty] 
    [else 
    (+ 1 (all-elements-cubed (cubed (first (rest a)))))])) 

(all-elements-cubed (list 1 2 3 7 5)) 

回答

1

firstrest程序是遞歸遍歷目錄最基本的組成部分。名稱是自描述的:它們訪問列表的第一個元素,以及列表中的其餘元素(在第一個之後)。在你的代碼,它們應當與cons使用 - 該程序構建列表,像這樣:

(define (all-elements-cubed a) 
    (cond 
    [(empty? a) empty] 
    [else 
    (cons ; we're building a new list as output, so `cons` a new element 
     (cubed (first a)) ; call `cubed` on the first element 
     (all-elements-cubed (rest a)))])) ; and proceed to the next elements 

要理解爲什麼上述工程還記得我們用cons用於遞歸構建適當的列表方式:

(cons <element> <list>) 

例如:

(cons 1 (cons 2 empty)) 
=> '(1 2)