Lisp奇怪的分段错误可能是eval错误

时间:2012-01-12 21:58:18

标签: lambda lisp eval common-lisp

我无法理解为什么这个解析函数名的代码会导致分段错误。 (fdefinition'realname) - >输出我的函数没有错误

(eval (setf (fdefinition name) `(lambda (this ,@args) ,@body)))

但如果我这样做(realname param)我会收到此错误 错误:分段违规(11)[代码0],位于8B238080

我的错误在哪里? 感谢

2 个答案:

答案 0 :(得分:0)

代码中的错误是您将列表指定为fdefinition而不是函数。我认为这是你的实现中的一个错误,虽然这会导致段错误。 (我不确定它是否真的是一个违反标准的错误,但如果实现会捕获并报告此错误,那肯定会更好。)

要将以lambda开头的列表转换为函数,您需要对其进行评估。另一方面,eval周围的setf似乎根本没有必要。因此,可能的解决方案是切换evalsetf

的位置
(setf (fdefinition name) (eval `(lambda (this ,@args) ,@body)))

答案 1 :(得分:0)

尝试

(eval `(setf (fdefinition ',name) #'(lambda (this ,@args) ,@body)))

或更好仍然使用宏而不是函数,并避免使用EVAL

(defmacro mymacro (name args &body body)
  `(setf (fdefinition ',name) #'(lambda (this ,@args) ,@body)))