关于Common Lisp代码(values (values 1 2 3) 4 5)的疑问
Common Lisp中
(values (values 1 2 3) 4 5)返回1 4 5的原因 这得从Common Lisp处理函数参数的规则说起:
- 当把一个能返回多个值的表达式作为函数参数传递时,只会保留该表达式的第一个返回值,其余返回值会被直接丢弃。
values函数的作用是返回多个值,但它接收的每个参数都只能是单个值——因为参数传递阶段已经把多值表达式的多余值丢掉了。
回到你的代码:
外层values的第一个参数是(values 1 2 3),这个表达式本身能返回1、2、3三个值,但作为参数传给外层values时,只有第一个值1被保留,2和3直接被丢弃。之后外层values把这个1和后面的4、5一起返回,最终输出就是1 4 5。
内容的提问来源于stack exchange,提问作者Filipmk
相关产品推荐
相关产品推荐

