gpt4 book ai didi

scheme - Racket中list和list*的区别

转载 作者:行者123 更新时间:2023-12-05 00:56:57 25 4
gpt4 key购买 nike

阅读时:

https://docs.racket-lang.org/reference/pairs.html

我遇到了 list*

类似于列表,但最后一个参数用作结果的尾部,而不是最终元素。仅当最后一个参数是列表时,结果才是列表。

“最后一个参数被用作结果的尾部,而不是最终元素”是什么意思?我认为列表总是以空列表结尾:'()

如果:“只有当最后一个参数是一个列表时,结果才是一个列表”,那还有什么?我认为方案中的所有内容都是一个列表。

最佳答案

list* 不作为 list 的变体,而是将其视为 cons 的变体可能更有意义。

> (cons 1 (list 2 3 4))
(list 1 2 3 4)
> (list* 1 (list 2 3 4))
(list 1 2 3 4)

在 2 个参数上,(list* fst rst) 产生与 (cons fst rst) 相同的结果。

当有更多参数时,list*cons 的多参数版本一样添加所有参数。

> (cons 1 (cons 2 (cons 3 (list 4 5))))
(list 1 2 3 4 5)
> (list* 1 2 3 (list 4 5))
(list 1 2 3 4 5)

就像 cons 不会产生正确的列表,如果你传递其他东西作为“休息”,list* 会做同样的事情。

> (equal? (cons 1 2) (list* 1 2))
#true
> (equal? (cons 1 (cons 2 3)) (list* 1 2 3))
#true

这些东西是 cons,但它们不是正确的列表。

list* 最常见的用法应该使用正确的列表作为最后一个参数。如果您正在寻找与 list 的关系,那么

> (list* 1 2 3 4 '())
(list 1 2 3 4)

使用 list*'() 作为最后一个参数将等效于 list 没有它。

关于scheme - Racket中list和list*的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61354630/

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