next up previous
Next: 1.4 バインディング情報の表現 Up: 1.3 変数の定義 Previous: 1.3.1 ?で始まる変数の判定

1.3.2 任意のシンボルを変数に宣言する方法

?で始まるというように決めるのではなく, シンボルを変数として宣言するという方法も考えられる. ここでは,シンボルの属性リストを利用して,
(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日