【发布时间】:2017-03-03 03:57:57
【问题描述】:
所以我正在尝试构建一个解释器来处理用户定义的 lambda 函数,这些函数可以有可变数量的参数。代码看起来有点像这样:
((lambda (x &optional y z) (func_body)) args))
现在,我可以得到的结果是正确的函数,而无需对其进行评估;例如,如果我定义 square X = (* X X) 并运行我的解释器,我会得到:
(* X X)
我需要的是经过评估后的上述功能。我试过这样的事情:
(let ((func (lambda (x &optional y z) (func_body))))
(apply/funcall func args))
((lambda (x &optional y z) (func_body)) args)
但是,它们仍然会产生我不想要的结果。我试图拥有它,所以当我定义square X = (* X X) 并输入(square 4) 时,我得到:
16
关于我缺少什么的任何指导?
编辑:args 子句由(cdr/car Y) 或其他函数生成。另外,如果我尝试使用函数 lisp 生成 lambda 列表,抱怨它不是符号,知道为什么会这样吗?
【问题讨论】: