gpt4 book ai didi

scheme - 如何在Scheme中创建一个使列表包含n,1、2、3、4、5…的函数

转载 作者:行者123 更新时间:2023-12-02 08:10:23 25 4
gpt4 key购买 nike

我正在尝试学习Scheme,但是遇到了问题。
我能够做一个递归函数来创建一个像(5,4,3,2,1)的列表。但是我不知道如何创建一个函数
(假设(define (make_list n)))
像(1,2,3,4,5 .... n)这样的元素具有升序。
有人提示吗?

 (define (make_list n)
(if (= n 1)
(list 1)
(append (list n) (make_list (- n 1)))))

所以这就是我用n元素制作列表的方法,它返回
> (make_list 3)
'(3 2 1)
> (make_list 5)
'(5 4 3 2 1)

我需要返回的内容如下:
> (make_list 3)
'(1 2 3)
> (make_list 5)
'(1 2 3 4 5)

最佳答案

您应该避免在不必要的地方使用附加。
Append将元素添加到列表的后面,首先需要遍历整个列表以找到结尾。 Cons不需要这样做,它可以立即将元素添加到最前面。

仅使用缺点即可创建升序列表和降序列表。

(define (desc-list n)
(if (= n 1)
(list 1)
(cons n (desc-list (- n 1)))))

> (desc-list 5)
'(5 4 3 2 1)

(define (asc-list from to)
(if (> from to)
'()
(cons from (asc-list (+ from 1) to))))

> (asc-list 1 5)
'(1 2 3 4 5)

虽然您也可以使用append。
要获得所需的一切,您要做的就是反转传递给追加的参数。
(define (make_list n)
(if (= n 1)
(list 1)
(append (make_list (- n 1)) (list n))))

> (make_list 5)
'(1 2 3 4 5)

所以你很亲近。

关于scheme - 如何在Scheme中创建一个使列表包含n,1、2、3、4、5…的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47737667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com