我认为在 Common Lisp 的大多数实现中,cons 单元通常/总是堆分配(请参阅Why is consing in Lisp slow?)
Common Lisp 确实提供了一种从函数返回多个值的工具(values
在返回时和multiple-value-bind
在调用点使用)。我在这里推测了一下,但我认为这种构造的动机有两个方面:1)truncate
在您不关心丢弃值的典型情况下使函数更易于使用;2)使其成为可能返回多个值,根本不使用堆分配的数据结构,并且(取决于实现(?))完全避免堆(以及以后的 GC 开销)。
Common Lisp(或可能像 SBCL 这样的特定实现)是否让您能够使用堆栈分配的数据(可能与弱引用之类的东西结合使用)或创建复合/大型值类型(类似于 C 中的结构)?