我在 Mac 上使用 chez 9.5.4。
以下代码:
;; demo.ss
(map display (list "this " "is " "weird "))
做这个:
$ chez --script demo.ss
weird this is
为什么意外的尤达?
我该如何防止这种情况?
它在鸡计划中按预期工作。
我在 Mac 上使用 chez 9.5.4。
以下代码:
;; demo.ss
(map display (list "this " "is " "weird "))
做这个:
$ chez --script demo.ss
weird this is
为什么意外的尤达?
我该如何防止这种情况?
它在鸡计划中按预期工作。
您的代码依赖于未指定的行为:地图的顺序未指定。
你想要每个。
Chez 没有堆栈溢出(如球拍或诡计)。用 map 做一个正确的折叠意味着最后没有 (reverse ...) 。它更快,除了在一些持续性繁重的代码中。
没有扩展堆栈优化的方案都做了左折叠。像鸡一样。
简短的回答是,这就是这样map
做的。
根据 r7rs-small 规范,在https://small.r7rs.org/attachment/r7rs.pdf第 51 页:
proc 应用于列表 s 的元素的动态顺序是未指定的。
这是因为map
旨在通过将纯函数应用于每个元素来转换列表。的唯一效果map
应该是它的结果列表。
正如 divs1210 引用 u/bjoli 指出的那样,Scheme 还定义了一个执行您想要的操作的过程。事实上,for-each
在 r7rs-small pdf 的同一页上进行了描述!它说:
for-each 的参数类似于 map 的参数,但 for-each 调用 proc 是为了它的副作用而不是它的值。与 map 不同,for-each 保证按从第一个元素到最后一个元素的顺序对列表 s 的元素调用 proc,并且 for-each 返回的值是未指定的。