【问题标题】:Intercept and modify user input in Common Lisp在 Common Lisp 中拦截和修改用户输入
【发布时间】:2015-08-27 12:15:41
【问题描述】:

我在 common lisp 中定义了一个评估器,可以简单地调用如下:

(repl)

从那时起,repl 可以解释像 (.cos arg) 这样的函数调用,否则 lisp 不知道。

当然,要使用它,必须先调用 (repl),否则 lisp 不知道 .cos 是什么。

我希望能够简单地调用 (.cos 90),并让它在 repl 中运行。到底有没有使用lisp的反射来拦截所有用户输入并在它之前调用另一个函数?

谢谢!

【问题讨论】:

    标签: reflection lisp metaprogramming read-eval-print-loop clisp


    【解决方案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 环境中定义了 printevalread

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 2015-01-02
      • 2014-09-19
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多