Перехват и изменение пользовательского ввода в Common Lisp

Я определил оценщик в общем lisp, который можно просто назвать так:

(repl)

С этого момента repl может интерпретировать вызовы функций, такие как (.cos arg), которые в противном случае неизвестны для lisp.

Конечно, чтобы его использовать, нужно сначала позвонить (repl), иначе lisp не знает, что такое.cos.

Я хотел бы иметь возможность просто позвонить (.cos 90), хотя и запустить его в repl. Есть ли способ использовать отражение lisp для перехвата всех вводимых пользователем данных и вызова другой функции перед этим?

Спасибо!

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))))) 

Я полагаю, у вас есть print, eval а также read определено в ваших оценщиках нулевой среде.

Другие вопросы по тегам