方案降序

时间:2015-04-04 19:24:03

标签: recursion scheme

我是计划的新手,所以我提前为这个基本问题道歉。我正在尝试创建递归降序列表。目前,它返回(1 2 3)而不是(3 2 1)

我认为问题是,我将新元素放在前面而不是列表的末尾。但是,我不太确定如何获得它,因为我在尝试时不断出错。

这是我到目前为止所拥有的:

(define (descend N mylist)  
  (if (= N 0) mylist
      (descend (- N 1) (cons N mylist))))

(descend 3 '())

1 个答案:

答案 0 :(得分:0)

首先,mylist参数完全没必要。它永远不会是空列表,所以它可以简单地省略。

其次,如果您不需要将函数设置为尾递归,那么只需将调用结构重新排序为consdescend,以便列表以相反的方向构建

(define (descend N)
  (if (= N 0) '()
      (cons N (descend (- N 1)))))

如果你需要一个尾递归版本,那么创建一个带辅助循环的累加器并简单地反向迭代可能更有意义。

(define (descend N)
  (let loop ((x 1)
             (acc '()))
    (if (= x N) (cons x acc)
        (loop (+ x 1) (cons x acc)))))