从适当的序列导出(广义)序列

Deriving a (generalized) Sequence from a Proper Sequence

许多 Common Lisp 序列函数将 适当的序列 作为输入,将 return 一个 序列 作为输出.从正确的序列开始,函数怎么可能不是return另一个正确的序列?例如?

(mapcan #'rest (list (list 0 1 2) (cons :a :b)))
=> (1 2 . :b)

...但是大多数时候您确实可以期望得到正确的序列;由于各种原因(实施者的成本等),功能可能未指定。

顺便说一下,注意 NCONC 被指定为 return 一个列表(至少在 HyperSpec 中是这样),但是同一页中给出的正式定义允许 non-lists 结果,例如(nconc nil 2) 是 2。这种不完整的 over-approximation 结果类型(在签名中,而不是函数的实际描述中)污染了所有其他结果:

(mapcan #'rest (list (list) (cons 1 2)))
=> 2

另见 Proposed ANSI Changes and ANSI Clarifications and Errata