Next: 1.4 バインディング情報の表現
Up: 1.3 変数の定義
Previous: 1.3.1 ?で始まる変数の判定
?で始まるというように決めるのではなく,
シンボルを変数として宣言するという方法も考えられる.
ここでは,シンボルの属性リストを利用して,
(defun init-matching-variables (vars)
(dolist (v vars vars)
(setf (get v 'variable-p) t)))
(defun clear-matching-variables (vars)
(dolist (v vars vars) (setf (get v 'variable-p) nil)))
(defun variable-p (x)
(and (symbolp x) (get x 'variable-p)))
というように,シンボルのvariable-pという属性リストに T が入っていれば,
マッチング変数とみなし,入っていなければ変数ではないというように
判定させるわけである.
> (init-matching-variables '(a b c))
(A B C)
> (variable-p 'a)
T
> (match '((a) b x y c) '((d) e x y z))
((C . Z) (B . E) (A . D))
> (clear-matching-variables '(a b c))
(A B C)
> (match '((a) b x y c) '((d) e x y z))
FAIL
という具合に,init-matching-variablesで変数を宣言し,
clear-matching-variablesで変数でなくするように宣言する.
generated through LaTeX2HTML. M.Inaba 平成18年5月7日