0

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

宏在 common lisp 中的延续——关于 OnLisp 中的实现

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

当文字说

=bind,旨在以与多值绑定相同的方式使用。它接受参数列表、表达式和代码体:参数绑定到表达式返回的值,并使用这些绑定计算代码体。

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

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

绑定是否仅在 =values 稍后出现时发生?

4

1 回答 1

1

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

于 2015-03-29T23:12:39.823 回答