Next: 11.3 next-statesの定義
Up: 11 積木問題の状態空間の生成
Previous: 11.1 状態遷移可能性の判断
積木のノードが集合で表現されていれば,
集合の要素がリストになっているため
比較をequalで行うset=を用いればよい.
CommonLispでは,:testパラメタを用いて
(defun node-equal (a b) (set= a b :test #'equal))
(defun set< (a b &key (test #'eq))
(cond
((null a) t)
((member (car a) b :test test)
(set< (cdr a) b :test test))
(t nil)))
(defun set= (a b &key (test #'eq))
(and (set< a b :test test) (set< b a :test test)))
という具合にmemberの:testを用いて,set=を定義すればよい.
>(node-equal
'((a on b) (c on table) (b on table))
'((c on table) (b on table) (a on b)))
generated through LaTeX2HTML. M.Inaba 平成18年5月7日