关于列表中的递归

时间:2013-10-26 00:56:33

标签: list scheme racket

(define (some n)
  (cond
    [(empty? n) false]
    [(cons? n)
     (+ (first n) 1)]))

我遇到了递归问题。它将1添加到列表的第一个元素。我如何将其添加到列表的其余部分并结合答案?

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题,您必须使用模板来遍历输入列表并构建输出列表作为答案:

(define (some n)
  (cond
    [(empty? n)                ; if the list is empty
     empty]                    ; return the empty list, not false!
    [else                      ; if it's not empty, then it's a list
     (cons (+ (first n) 1)     ; cons the new element
           (some (rest n)))])) ; and advance the recursion

基本步骤始终相同:询问列表是否为空,cons当前元素,推进列表其余部分的递归。具体细节将根据问题而变化,但上述模板将使您在大多数时间都处于正确的轨道上。现在结果将是一个新列表,其所有元素都加1:

(some '(1 2 3 4 5))
=> '(2 3 4 5 6)