我正在尝试使用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))
答案 0 :(得分:1)
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)