【问题标题】:Need help using eval and quote funct需要帮助使用 eval 和 quote 功能
【发布时间】:2011-12-29 00:12:52
【问题描述】:

我的代码如下所示:

 (eval `(setf (fdefinition name-funct)(lambda ............)))

为了创建我的函数,我使用了引号...但是 name-funct 是一个变量...如果我使用引号,我如何才能对解释说?是否存在做我想做的事的方法?

* 编辑 *

用逗号我有这种情况

Error: The variable REAL-NAME is unbound.

所以我需要 name-funct 的内容必须是我创建的 lambda 的名称。但是使用 Greg Hewgill 向我建议的逗号运算符,Lisp 会查找 name-funct 的内容,它是实名的,就像另一个变量一样。

【问题讨论】:

  • 你想做什么? real-name 是什么?为什么你认为你需要eval
  • 我看了你最近在这里提出的一系列问题,我的印象是你的问题越来越离奇了。我建议你应该问一个关于你想要达到的目标的正确方法的问题,因为我强烈怀疑你现在是否走在正确的轨道上。
  • 完全不清楚您需要 eval 和反引号做什么。只需直接使用setf。如果您使用反引号从 s 表达式构建 lambda 函数,请考虑改用 lambda 组合它,或者至少将 eval 和反引号直接包裹在 lambda 周围,而不是 setf
  • 我的意思是这样的:(setf (fdefinition name-funct) (eval `(lambda ............)))
  • 哇,在 Lisp 中不应该出现分段错误,除非您明确降低了安全级别(即声明了(optimize (safety 0)))。您使用的是哪种 Lisp 实现?

标签: lisp eval quote


【解决方案1】:

使用逗号:

(eval `(setf (fdefinition ,name-funct)(lambda ............))

【讨论】:

  • 似乎不起作用。如果我使用'name-funct,我可以这样做(name-funct args)并且可以工作,但是如果我使用,name-funct 如果我这样做(real-name-of-my-funct args)我会收到此错误未定义操作员姓名-功能
  • 我使用 LipsWorks 和 Common Lisp
  • (fdefinition 'real-name) 错误:未定义函数 REAL-NAME 形式(SYMBOL-FUNCTION TALK)。
  • 我编辑了我的答案,逗号有效,但这不是我要找的
  • (fdefinition 'real-name-funct) 显示错误.. 有没有办法以更好的方式编写我想做的事情?也许使用不同的方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
相关资源
最近更新 更多