Recursion 方案降序
我对这个计划还不熟悉,所以我提前为这个基本问题道歉。我正在尝试创建一个递归降序列表。目前它返回的是1 2 3,而不是3 2 1 我想问题是,我把新元素放在列表的前面而不是末尾。然而,我不太确定如何获得它,因为我在尝试时不断出错 以下是我目前掌握的情况: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的论点是
(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