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

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

4

1 回答 1

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当前元素,将递归推进到列表的其余部分。具体细节会根据问题而改变,但上面的模板大部分时间都会让你走上正轨。现在结果将是一个新列表,其所有元素都加一:

(some '(1 2 3 4 5))
=> '(2 3 4 5 6)
于 2013-10-26T01:20:46.100 回答