我最近开始学习 lisp 并完成了一些可供我使用的简单练习,不幸的是我被卡住了,在花了几个小时之后,似乎我似乎没有更接近一个体面的解决方案。
我正在尝试生成一个函数,该函数将表达式“树”作为其参数,并返回具有相关计算值的树来代替运算符。
树的外观示例如下:(* (+ 10 (* 4 9)) (- 6 10))
函数应返回:(-184 (46 10 (36 4 9)) (-4 6 10))
我已经尝试了各种方法,但没有任何效果。我创建了一些可行但在编码风格方面非常糟糕的东西,我真的迷失了。
(defun evalTree (node &optional n)
(when node
(rplaca node (eval node))
(setq n (first (rest node)))
(rplaca n (eval n))
(setq n (first (rest (rest node))))
(rplaca n (eval n))
(setq n (first (rest (rest (first (rest node))))))
(rplaca n (eval n)))
(format t "node=~a n=~a~%" node n)
node)
我认为我的解决方案应该使用 apply 函数或 eval 函数,但我只是不确定如何在树上正确使用它们。