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