【问题标题】:Are the variables *,+, and / bound to recent input in SLIME or Clozure CL?变量 *、+ 和 / 是否绑定到 SLIME 或 Clozure CL 中的最近输入?
【发布时间】:2010-09-09 17:59:03
【问题描述】:

当我发现这个时,我正在玩 SLIME(连接了一个 Clozure REPL):

看起来变量 +、* 和 / 都绑定到最近输入的某些变化,+ 是输入本身,* 是评估该输入的结果,而 / 是包含在列表中的结果。

这是对的吗?谁对此负责,SLIME 还是 Clozure?我在 SLIME 手册中找不到任何内容。

谢谢!

; SLIME 2010-05-13
CL-USER> +
NIL
CL-USER> *
NIL
CL-USER> /
(NIL)
CL-USER> -
-
CL-USER> +
-
CL-USER> (list 1 2)
(1 2)
CL-USER> +
(LIST 1 2)
CL-USER> /
((LIST 1 2))
CL-USER> (+ 1 2)
3
CL-USER> /
(3)
CL-USER> *
(3)
CL-USER> (* 1 2)
2
CL-USER> *
2
CL-USER> 

【问题讨论】:

    标签: lisp common-lisp slime


    【解决方案1】:

    这些都是 Common Lisp 标准指定的,甚至更多。在 the environment dictionary 中搜索“变量”。

    【讨论】:

      【解决方案2】:

      +
      ++
      +++

      当顶层循环正在评估表单时,变量 + 绑定到循环读取的前一个表单。变量 ++ 保存了 + 的前一个值(即两次交互之前计算的表单),而 +++ 保存了 ++ 的前一个值。

      -

      当顶层循环正在评估表单时,变量 - 绑定到表单本身;也就是说,一旦完成此交互,它将被赋予 + 的值。

      *
      **
      ***

      当顶层循环正在评估表单时,变量 * 绑定到最后一次循环结束时打印的结果;也就是说,它是通过评估 + 中的形式产生的值。如果生成了多个值,* 仅包含第一个值; * 如果产生零值,则包含 nil。变量 ** 保存了 * 的前一个值(即两次交互之前打印的结果),* 保存了 ** 的前一个值。

      /
      //
      ///

      当顶层循环正在评估表单时,变量 / 绑定到最后一次循环结束时打印的结果列表;也就是说,它是通过评估 + 中的形式产生的所有值的列表。 * 的值应始终与 / 的值的 car 相同。变量 // 保存 / 的前一个值(即两次交互之前打印的结果), /// 保存 // 的前一个值。因此,** 的值应始终与 // 的 car 相同,对于 * 和 /// 也是如此。

      来自Common Lisp the Language, 2nd Edition 20.2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-04
        • 2012-03-13
        • 2011-08-04
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        相关资源
        最近更新 更多