Re: LISP を使うとき([Q] ログインシェルとそうでないシェ ル)
kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> そこの原点には「インタプリタ」ってのがあると思うんだけど...
いいえ、完全な誤解だと思います。
動的な patch あてには load があれば良いだけですし、
動的な program 変更には compile と load があれば良い。
もちろんそういった operation を行なうための i/f 、具体的には listener
が必要ですが、listener と interpreter はまた別物です。
CMUCL には listner がありますが、普通我々が期待するところの
interpreter は無いです。以下の例参照ください。
% lisp
CMU Common Lisp 18c, running on hinttika.msi.co.jp
Send questions to cmucl-help@cons.org. and bug reports to cmucl-imp@cons.org.
Loaded subsystems:
Python 1.0, target Intel x86
CLOS based on PCL version: September 16 92 PCL (f)
* (defmacro foo (x) `(car ,x)) ; マクロ foo の定義
FOO
* (defun bar (x) (foo x)) ; foo を呼ぶ関数 bar の定義
BAR
* (bar '(1 2 3))
1
* (defmacro foo (x) `(cdr ,x)) ; マクロ foo の再定義
FOO
* (bar '(1 2 3)) ; でも bar から呼ばれる foo は昔のまま
1
* (defun bar (x) (foo x)) ; bar を 再定義あるいは再コンパイルして
; はじめて新たな foo が呼び出される
BAR
* (bar '(1 2 3))
(2 3)
*
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735