【发布时间】:2013-07-27 21:11:27
【问题描述】:
我已经阅读了文档(几个不同的版本!),但我无法完全理解 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;请赐教。
谢谢!
【问题讨论】:
-
感谢 Chris 指出我原来的错字。我要把它留在里面,否则这个问题没有多大意义(结果我比我想象的理解得更好;我就是不能打字!:) 很好的解释,谢谢!
标签: lisp common-lisp multiple-value