Next: 6.4 アトムコマンドの処理
Up: 6 例題:リストの対話的編集プログラム
Previous: 6.2 使い方の例
この構造エディタはキーボードからのコマンド入力を待ち,入力されるとコマ
ンドを解釈し実行しまた次のコマンドを待つという制御ループを持っています.
入力待ちのためにプロンプトを表示し,コマンド入力には(read)を用います.
入力されたコマンドはcondやcaseなどを用いて場合分けし,リスト構造を変更
したり,現在編集しているレベルを移動する関数などを呼びます.
コマンドの形式は大きくわけて,アトムとリストの2種類になります.
(defun ledit (l)
(let ((sexp (copy-tree l)))
(setq *sexp* sexp
*sexp0* sexp
*sexp1* sexp
*markstack* (list sexp))
(when (eq 'ok (edit-sexp))
(rplaca l (car *sexp0*))
(rplacd l (cdr *sexp0*)) t)))
;;;
(defun edit-sexp ()
(catch 'edit-sexp-end
(let ((prompt 'e>) cmd)
(prin1 prompt)
(do ((cmd (read) (read)))
(nil)
(cond ((atom cmd) (ledit-atom-cmd cmd))
((numberp (car cmd))
(ledit-list-number-cmd
(car cmd) (cdr cmd)))
(t (ledit-list-symbol-cmd
(car cmd) (cdr cmd))))
(prin1 prompt)))))
generated through LaTeX2HTML. M.Inaba 平成18年5月6日