【问题标题】:What is the advantage of a symbol that binds to a value and function at the same time?同时绑定到值和函数的符号有什么优势?
【发布时间】:2011-05-09 11:36:05
【问题描述】:

在 lisp 中,一个符号可以同时绑定到一个值和一个函数。 例如,

符号 f 绑定到函数

(defun f(x)
    (* 2 x))

符号 f 绑定到一个值

(setq f 10)

所以我写了这样的东西:

(f f)

=> 20

这样的功能有什么好处?

【问题讨论】:

标签: namespaces lisp


【解决方案1】:

它对日常任务很有用,但主要原因是因为宏,一旦你学习它,你就会明白为什么。

【讨论】:

    【解决方案2】:

    符号可以同时具有函数和值。可以使用 SYMBOL-FUNCTION 检索函数,使用 SYMBOL-VALUE 检索值。

    这不是完整的视图。 Common Lisp 有(至少)两个命名空间,一个用于函数,一个用于变量。全球符号参与其中。但对于局部函数,符号不涉及。

    那么有什么优势:

    • 函数和变量的标识符之间没有名称冲突。

      方案:(define (foo lst) (list lst))

      CL: (defun foo (list) (list list))

    • 没有运行时检查某个东西是否真的是一个函数

      方案:(定义(foo)(bar))

      CL: (defun foo () (bar))

      在 Scheme 中不清楚 BAR 是什么。它可能是一个数字,在调用 FOO 时会导致运行时错误。

      在 CL BAR 中,要么是函数,要么是未定义的。它永远不可能是别的东西。例如,它永远不能是一个数字。无法将函数名称绑定到数字,因此这种情况永远不需要在运行时检查。

    【讨论】:

      猜你喜欢
      • 2012-05-22
      • 1970-01-01
      • 2014-04-09
      • 2014-12-05
      • 2010-09-19
      • 2012-12-19
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多