next up previous
Next: 11.3 next-statesの定義 Up: 11 積木問題の状態空間の生成 Previous: 11.1 状態遷移可能性の判断

11.2 node-equalの定義

積木のノードが集合で表現されていれば, 集合の要素がリストになっているため 比較を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日