Recursion 方案降序

Recursion 方案降序,recursion,scheme,Recursion,Scheme,我对这个计划还不熟悉,所以我提前为这个基本问题道歉。我正在尝试创建一个递归降序列表。目前它返回的是1 2 3,而不是3 2 1 我想问题是,我把新元素放在列表的前面而不是末尾。然而,我不太确定如何获得它,因为我在尝试时不断出错 以下是我目前掌握的情况: (define (descend N mylist) (if (= N 0) mylist (descend (- N 1) (cons N mylist)))) (descend 3 '()) 首先,mylist的论点是

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

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

以下是我目前掌握的情况:

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

(descend 3 '())
首先,mylist的论点是完全没有必要的。它只是一个空列表,所以可以省略它

其次,如果你不需要你的函数是尾部递归的,那么简单地重新排列你对cons和down的调用的结构,这样列表的构建方向就相反了

(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)))))

谢谢亚历克西斯的帮助-我同意我喜欢你的第一个解决方案。它干净而简单。然而,我确实需要让我的函数成为元素、列表,并让它成为尾部递归。这就是为什么我有mylist。你有什么建议来满足这个要求吗?@user3281388你能澄清一下第二个参数应该做什么吗?它总是应该是生成列表的尾部吗?我的理解是,列表将是最终返回的内容。我传入一个int,然后它返回一个降序列表。@user3281388是的,这是有意义的,但这并不能解释为什么需要第二个参数。我认为尾部递归应该有两个参数。另外,对于这个特殊的问题,它说要做一个函数,使下降3'返回3 2 1