Racket 如何使用First和Rest函数?

Racket 如何使用First和Rest函数?,racket,Racket,我试图使用First和Rest来迭代racket中的数字列表,但我不确定我是否正确使用了这些函数,因为代码不起作用 (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

我试图使用First和Rest来迭代racket中的数字列表,但我不确定我是否正确使用了这些函数,因为代码不起作用

(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))

first
rest
过程是递归遍历列表的最基本构建块。这些名称是自描述的:它们访问列表的第一个元素,以及列表中的其余元素(在第一个元素之后)。在您的代码中,它们应该与
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)