next up previous
Next: 4.4 アトムコマンドの処理 Up: 4 リストの編集プログラム Previous: 4.2 使い方の例

4.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月7日