同时阅读:
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
如果您通过“ rest”传递其他内容一样,它不会产生适当的列表,list*
也会这样做。
> (equal? (cons 1 2) (list* 1 2))
#true
> (equal? (cons 1 (cons 2 3)) (list* 1 2 3))
#true
但是list*
的最常用用法应使用适当的列表作为最后一个参数。如果您要查找与list
的关系,则
> (list* 1 2 3 4 '())
(list 1 2 3 4)
使用list*
作为最后一个参数将等于'()
。