使用scheme从递归中创建一个新列表

时间:2014-04-07 02:54:56

标签: scheme

我正在学习计划作为一种学习递归的方法,我觉得它对我很好: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)))) )) ))

这就是我尝试的代码,但没有任何真正的运气.. 有什么帮助吗?

1 个答案:

答案 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个值吗?