Next: 6.5 リスト形コマンドの処理
Up: 6 例題:リストの対話的編集プログラム
Previous: 6.3 対話プログラムの構造
コマンドのうちリストではない形のものは以下のようにledit-atom-cmdで処理
されます.アトムのうち数もコマンドで,その数の番目の要素へポインタを移
動するというコマンドになっています.そのポインタを移動する部分は関数
ledit-atom-number-cmdで処理しています.
(defun ledit-atom-cmd (cmd)
(case
cmd
((h ?) (ledit-help))
(p (level-prin1 *sexp*))
((ok q quit) (throw 'edit-sexp-end cmd))
(pp (pprint *sexp*))
(mark (push *sexp* *markstack*))
((! ^ top) (setq *sexp* *sexp0*))
((0 u) (setq *sexp* *sexp1*))
(< (setq *sexp*
(cond (*markstack* (pop *markstack*))
(t *sexp0*))))
(cdr (setq *sexp* (cdr *sexp*)))
(nx (setq *sexp*
(cadr (member *sexp* *sexp1*
:test #'equal))))
(t (if (numberp cmd)
(ledit-atom-number-cmd cmd)
(princ "?")))))
;;;
(defun ledit-atom-number-cmd (num)
(cond
((and (> num 0) (< num (1+ (length *sexp*))))
(setq *sexp1* *sexp*)
(setq *sexp* (nth (1- num) *sexp*)))
((and (< num 0) (< (- num) (1+ (length *sexp*))))
(setq *sexp1* *sexp*)
(setq *sexp* (nth (- 0 num 1) (reverse *sexp*))))))
generated through LaTeX2HTML. M.Inaba 平成18年5月6日