我在 common lisp 中定义了一个求值器,可以像这样简单地调用它:
(repl)
从那时起,repl 可以解释像 (.cos arg) 这样的 lisp 未知的函数调用。
当然,要使用它,必须先调用 (repl),否则 lisp 不知道 .cos 是什么。
不过,我希望能够简单地调用 (.cos 90),并让它在 repl 中运行。有没有办法使用 lisp 的反射来拦截所有用户输入并在它之前调用另一个函数?
谢谢!
最佳答案
更好的方法是制作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)))))
我假设您在 evaluators null 环境中定义了 print
、eval
和 read
。
关于reflection - 在 Common Lisp 中拦截和修改用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30786928/