Lambda Lisp奇怪的分割错误可能是评估错误

Lambda Lisp奇怪的分割错误可能是评估错误,lambda,lisp,eval,common-lisp,Lambda,Lisp,Eval,Common Lisp,我不明白为什么这个定义函数名的代码会导致分段错误。 (fdefinition'realname)-->我的函数的输出没有错误 (eval (setf (fdefinition name) `(lambda (this ,@args) ,@body))) 但是如果我这样做(realname param),我会得到这个错误 错误:分段冲突(11)[代码0]位于8B23800 我的错误在哪里? 谢谢代码中的错误是将列表指定为f定义,而不是函数。我认为这是一个错误在您的实现,虽然这是造成一个Sebug

我不明白为什么这个定义函数名的代码会导致分段错误。 (fdefinition'realname)-->我的函数的输出没有错误

(eval (setf (fdefinition name) `(lambda (this ,@args) ,@body)))
但是如果我这样做(realname param),我会得到这个错误 错误:分段冲突(11)[代码0]位于8B23800

我的错误在哪里?
谢谢

代码中的错误是将列表指定为
f定义
,而不是函数。我认为这是一个错误在您的实现,虽然这是造成一个Sebug。(我不确定它是否真的是一个bug,因为它违反了标准,但如果实现能够捕获并报告这个错误,肯定会更好。)

要将以
lambda
开头的列表转换为函数,需要对其求值。另一方面,
setf
周围的
eval
似乎根本没有必要。因此,一个可能的解决方案是切换
eval
setf
的位置:

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

代码中的错误是将列表指定为
fdefinition
,而不是函数。我认为这是一个错误在您的实现,虽然这是造成一个Sebug。(我不确定它是否真的是一个bug,因为它违反了标准,但如果实现能够捕获并报告这个错误,肯定会更好。)

要将以
lambda
开头的列表转换为函数,需要对其求值。另一方面,
setf
周围的
eval
似乎根本没有必要。因此,一个可能的解决方案是切换
eval
setf
的位置:

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

或者最好还是使用宏而不是函数,避免使用
EVAL

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

或者最好还是使用宏而不是函数,避免使用
EVAL

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

使用什么lisp实现/系统?使用什么lisp实现/系统?