您好我有一些功课包括扩展lisp解释器。我们将使用预先评估的参数(例如,例如< =)和三个执行自己评估的基元(例如if)来构建三个基元。 我超越了职责的召唤,在这个练习的范围内创造了唯一有趣的功能:( defun)[它是定义用户功能的常用lisp关键字]。
我想知道我的用于管理用户定义函数调用的算法是否值得。
在伪代码中,这里是:
get list of parameters # (x y z)
get list of arguments # (1 2 3)
get body of function # (+ x (* y z))
for each parameter, arg # x
body = replace(parameter, argument, body) # (+ 1 (* y z))
# (+ 1 (* 2 z))
# (+ 1 (* 2 3))
eval(body) # 7
有没有更好的方法来实现这一目标? 感谢。
编辑:replace()是一个在body的子列表上递归的函数。
答案 0 :(得分:0)
我从来没有找到过更好的,没有人提出更好的建议,这个问题没有引起任何兴趣,而且我正在横冲直撞地关闭我打开的问题,所以答案是:
我的算法足够好了。