gpt4 book ai didi

scheme - 如何反转 Scheme 中列表元素的顺序

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:04 25 4
gpt4 key购买 nike

我得到了一个函数来反转列表中元素的顺序,例如

(define (rvsl sequence)
(foldl (lambda (x y)
(cons y x))
'() sequence))

但是,当我使用输入在 DrRacket 中运行它时

(rvsl (list 2 3 4))

DrRacket 告诉我的

cons: second argument must be a list, but received empty and 2

谁能给我一些解决办法吗?

提前致谢!

最佳答案

您的代码的问题在于您以错误的顺序传递了参数 - 当使用 cons 构建列表时,第一个参数是我们想要放在开头的新元素的列表,第二个是我们到目前为止构建的列表。

话虽如此,使用 foldl 反转列表要简单一些,您根本不需要使用 append - 事实上,使用appendcons 满足时:

(define (rvsl sequence)
(foldl cons
'()
sequence))

为什么这有效?这次让我们更明确地重写函数:

(define (rvsl sequence)
(foldl (lambda (current accumulated)
(cons current accumulated))
'()
sequence))

现在我们可以看到 lambda 过程接收两个参数:输入列表中的 current 元素,以及到目前为止的 accumulated 值- 好的参数名称可以改变世界!这比调用参数 xy 要清楚得多,后者只字未提。

在这种情况下,我们只想cons 累加值头部的当前元素(开始时是一个空列表),从而生成一个反向列表作为输出。鉴于 lambda 过程接收两个参数并以相同的顺序将它们传递给 cons,我们可以简化整个事情并只传递 cons过程作为参数。

关于scheme - 如何反转 Scheme 中列表元素的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25606066/

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