2014-06-12 46 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)