我正在学习计划作为一种学习递归的方法,我觉得它对我很好:D但现在,我有一个问题。我如何创建一个名为thirds的函数,它选择一个元素并跳过2并重复该过程。所以它返回一个新的列表,其中包含第一个元素,每三个元素,例如(thirds '(a b c d e f g h))
应该返回
(a d g)
(DEFINE (thirds lst)
(COND
((NOT(list? lst)) (newline) "USAGE: (thirds [list])")
((NULL? lst) lst)
((NULL? (CDR lst)) (CAR lst))
(ELSE (CONS (CAR lst) (thirds (CDR(CDR(CDR lst)))) )) ))
这就是我尝试的代码,但没有任何真正的运气.. 有什么帮助吗?
答案 0 :(得分:0)
还有另一种方法可以做到这一点,即创建一个辅助函数并传递一个索引。
(define (thirds L)
(thirds-helper L 0))
(define (thirds-helper L i)
(cond ((null? L) '())
((= 0 (modulo i 3))
(cons (car L)
(thirds-helper (cdr L) (+ i 1))))
(else (thirds-helper (cdr L) (+ i 1)))))
为读者练习。你可以修改它来挑选列表的任何给定的第n个值吗?