next up previous
Next: 6.5 リスト形コマンドの処理 Up: 6 例題:リストの対話的編集プログラム Previous: 6.3 対話プログラムの構造

6.4 アトムコマンドの処理

コマンドのうちリストではない形のものは以下のように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日