我已经阅读了文档(几个不同的版本!),但我无法完全理解multiple-value-bind
。
这是我(认为我)知道的:
- 第一个参数是要绑定的变量列表。
- 下一个参数是绑定到变量的值列表。
- 我对这两个列表的长度必须相同吗?
- 最后一个参数(它是可选的吗?)是一段代码,可以用它们的新绑定值作用于变量。
这似乎是文档的阅读方式,它符合我正在阅读但不完全遵循的代码。当我尝试multiple-value-bind
从头开始创建语句作为测试时,我遇到了麻烦。我最终得到这样的结果:
? (mulitple-value-bind (x y z) (values 11 22 33) (+ x y z)) ;; EDIT: contains typo
> Error: Unbound variable: Y
> While executing: CCL::CHEAP-EVAL-IN-ENVIRONMENT, in process Listener(7).
> Type cmd-/ to continue, cmd-. to abort, cmd-\ for a list of available restarts.
> If continued: Retry getting the value of Y.
> Type :? for other options.
1 >
(我有点希望输出66
类似于.)(如果重要的话,我正在使用 Clozure-CL,尽管我认为它不应该。)
另外,我正在查看一些示例代码(试图理解 Project Euler Problem 24),内容如下:
(multiple-value-bind
(q r)
(floor n m)
(cons (nth q lst) (permute-b r (remove-nth q lst)))
)
(注意:我可能有错误的缩进,这可能会影响我缺乏理解)
我对此不明白的是,在我看来,好像有 2 个变量被乘法绑定(q & r),但只有一个值(floor n m)
。还是其他值是cons
语句,没有body?!
如您所见,我完全不明白multiple-value-bind
;请赐教。
谢谢!