【问题标题】:Lisp redefining functionsLisp 重新定义函数
【发布时间】:2014-01-07 11:15:09
【问题描述】:

有人可以帮助了解这里发生了什么吗?

(DEFUN G(L)(+(CAR L)(CADR L)))
(SETQ H`F)(SET H `G)

我想知道当我评估 (F` (2 3 4 5 6 )) 时会发生什么

我已经在我的 lisp 解释器中编写了它,但出现以下错误:

Undefined function F

【问题讨论】:

  • 我假设您的意思是单引号 (') 而不是反引号 (`)?
  • @mbratch 从其他格式和样式(例如,间距、大小写和set 的使用)来看,我希望(希望!)这可能是从较旧的来源复制的,也许排版在代码中使用反引号在文本中引用。幸运的是,在这种情况下,它没有任何区别,因为它只是引用的符号。
  • @JoshuaTaylor 好点。我看到几个 Unicode 单引号在同一过程中也出现在帖子周围。

标签: lisp common-lisp


【解决方案1】:

Common Lisp 有一个用于值的命名空间和另一个用于函数的命名空间。

CL-USER 49 > (DEFUN G(L)(+(CAR L)(CADR L)))
G

CL-USER 50 > (SETQ H 'F)
F

CL-USER 51 > (SET H 'G)
G

CL-USER 52 > F
G

CL-USER 53 > (symbol-value 'F)
G

CL-USER 54 > (symbol-function 'f)

Error: Undefined function F in form (SYMBOL-FUNCTION F).

您所做的只是设置 F 的值,而不是设置函数 F

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多