我不明白为什么这段 defun 函数名的代码会导致段错误。 (fdefinition 'realname) --> 我的函数输出没有错误
(eval (setf (fdefinition name) `(lambda (this ,@args) ,@body)))
但是如果我这样做(realname param)我会得到这个错误 错误:8B238080 处的分段违规 (11) [代码 0]
我的错误在哪里? 谢谢
最佳答案
您的代码中的错误是您将列表分配为 fdefinition
而不是函数。尽管这会导致段错误,但我认为这是您实现中的一个错误。 (我不确定它是否真的是一个错误,因为它违反了标准,但如果实现本身能够捕获并报告此错误,那肯定会好得多。)
要将以 lambda
开头的列表转换为函数,您需要对其求值。另一方面,setf
周围的eval
似乎根本没有必要。所以一个可能的解决方案是交换 eval
和 setf
的位置:
(setf (fdefinition name) (eval `(lambda (this ,@args) ,@body)))
关于lambda - Lisp 奇怪的段错误可能是 eval 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842939/