关于OnLisp的延续

时间:2015-03-29 13:17:26

标签: lisp common-lisp on-lisp

我仍然对已经回答的问题感兴趣。

continuation in common lisp by macros — regarding an implemetation in OnLisp

如果Paul Graham的假设是正确的,尤其是从(A 5)变为(B 1)时会发生什么?什么是 cont 绑定到这里?

当文字说

时又有一点混乱
  

= bind,旨在以与multiple-value-bind相同的方式使用。它需要一个参数列表,一个表达式和一个代码体:参数绑定到表达式返回的值,并使用这些绑定评估代码体。

我无法直接从= bind的宏定义看到绑定,看起来像

 (defmacro =bind (parms expr &body body)
  `(let ((*cont* #'(lambda ,parms ,@body))) ,expr))

只有在以后出现=值时才会发生绑定吗?

1 个答案:

答案 0 :(得分:1)

宏将连续符*cont*设置为lambda,它将所有变量作为参数,然后计算表达式expr。表达式应该用最终值来调用continuation,这可以通过调用=values函数或直接使用funcall来间接完成。与Scheme不同,其中使用任何表达式的返回值隐式调用continuation,您必须通过调用*cont*或使用=values而不是从任何函数返回来以延续传递方式显式编写代码。 / p>