lambda - Lisp 奇怪的段错误可能是 eval 错误

标签 lambda lisp eval common-lisp

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

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

但是如果我这样做(realname param)我会得到这个错误 错误:8B238080 处的分段违规 (11) [代码 0]

我的错误在哪里? 谢谢

最佳答案

您的代码中的错误是您将列表分配为 fdefinition 而不是函数。尽管这会导致段错误,但我认为这是您实现中的一个错误。 (我不确定它是否真的是一个错误,因为它违反了标准,但如果实现本身能够捕获并报告此错误,那肯定会好得多。)

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

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

关于lambda - Lisp 奇怪的段错误可能是 eval 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842939/

相关文章:

java - 通过过滤器列表运行字符串列表

java - Java 8 中日志记录的惰性评估

scheme - 我在评估此方案功能时遇到问题?

lisp - 寻找推荐的 AutoLisp/VisualLisp 书籍

javascript - 如何在猴子修补过程中替换 eval() ?

Python Tkinter 计算器不会计算输入小部件中的文本

C# 使用 ExpressionTree 将 DataTable 映射到 List<T>

lisp - 如何保存 Lisp 编译器的状态?

JavaScript eval(0047) 返回 39

c++ - 指向 lambda 的智能指针