所以我试图构造一个解释器,可以处理用户定义的lambda函数,其中可以有可变数量的参数。代码看起来有点像这样:为什么不将函数值传递给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)
,并把在我得到:
16
对我缺少了任何指导?
编辑:args子句由(cdr/car Y)
或其他函数生成。另外,如果我尝试使用函数lisp生成lambda列表,抱怨它不是一个符号,为什么会这样呢?
我应该提到args子句是由(cdr/car Y)或其他函数生成的。大部分的lambda函数现在都是我想到的。基本上,命令行读取的东西类似于 '>'square X =(* X X)'square 4' result:'> 16' – KMK
使用'coerce',请参阅编辑。 – sds
非常感谢! – KMK