Перехват и изменение пользовательского ввода в 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
определено в ваших оценщиках нулевой среде.