我仍然对已经回答的问题感兴趣。
continuation in common lisp by macros — regarding an implemetation in OnLisp
如果保罗·格雷厄姆的假设是正确的,特别是当从(A 5)变为(B 1)时,会发生什么康特和这里有什么关系?
当文本说
=bind,与多值绑定的使用方式相同它接受一个参数列表、一个表达式和一个代码体:这些参数被绑定到表达式返回的值,代码体由这些绑定求值。
我无法直接从=bind的宏定义中看到绑定,它看起来像
(defmacro =bind (parms expr &body body)
`(let ((*cont* #'(lambda ,parms ,@body))) ,expr))
绑定是否只在后面出现=值时发生?
最佳答案
宏将continuation设置为lambda,它将所有变量作为参数,然后计算表达式表达式将使用其最终值调用continuation,这可以通过调用*cont*
函数间接完成,也可以直接使用expr
函数完成与Scheme不同,在Scheme中,continuation是用任何表达式的返回值隐式调用的,您必须通过调用=values
或使用funcall
而不是从任何函数返回来显式地以continuation传递样式编写代码。