【问题标题】:regarding continuation in OnLisp关于继续使用 OnLisp
【发布时间】:2015-03-29 13:17:25
【问题描述】:

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

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

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

当文字说的时候又是一个混乱

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

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

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

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

【问题讨论】:

    标签: lisp common-lisp on-lisp


    【解决方案1】:

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

    【讨论】:

    • 我一直在试验这段代码,发现lambda的延续就是它自己。我无法使用它来移植我在 Scheme 中编写的任何基于延续的代码。
    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多