next up previous
Next: 6.4 アトムコマンドの処理 Up: 6 例題:リストの対話的編集プログラム Previous: 6.2 使い方の例

6.3 対話プログラムの構造

この構造エディタはキーボードからのコマンド入力を待ち,入力されるとコマ ンドを解釈し実行しまた次のコマンドを待つという制御ループを持っています. 入力待ちのためにプロンプトを表示し,コマンド入力には(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日