如何使用First和Rest功能?

时间:2014-06-12 00:14:15

标签: racket

我正在尝试使用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 个答案:

答案 0 :(得分: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)