我在普通的lisp中定义了一个可以简单地调用的评估器:
(repl)
从那时起,repl可以解释像lisp一样不知道的函数调用,如(.cos arg)。
当然,要使用它,必须首先调用(repl),否则lisp不知道.cos是什么。
我希望能够简单地调用(.cos 90),然后让它在repl中运行。无论如何使用lisp的反射拦截所有用户输入并在它之前调用另一个函数?
谢谢!
答案 0 :(得分:1)
更好的方法是制作my-eval
,然后你可以做
(defun my-cos (arg)
(my-eval (list '.cos arg)))
repl
就像是
(defun my-repl ()
(my-eval '((lambda (ev)
(ev ev))
(lambda (ev)
(print (eval (read)))
(ev ev)))))
我假设您在评估者null环境中定义了print
,eval
和read
。