next up previous
Next: 11.2 node-equalの定義 Up: 11 積木問題の状態空間の生成 Previous: 11 積木問題の状態空間の生成

11.1 状態遷移可能性の判断

現在の状態から可能な次の状態のリストを作りだすために,まず possible-statesという関数を作る. possible-statesは,現在の状態state, 移動するブロックおよびそのブロックを載せる対象 のリストdestを与えて次の状態の リストを返すとする.
> s
((a on table) (b on c) (c on table) (d on a))

> (possible-states 'd s '(b table))
(((d on b) (a on table) (b on c) (c on table))
 ((d on table) (a on table) (b on c) (c on table)))

> (possible-states 'b s '(d table))
(((b on d) (a on table) (c on table) (d on a))
 ((b on table) (a on table) (c on table) (d on a)))

> (possible-states 'a s '(b d))
(((a on b) (b on c) (c on table) (d on a))
 ((a on d) (b on c) (c on table) (d on a)))

> (possible-states 'a s '(b d table))
(((a on b) (b on c) (c on table) (d on a))
 ((a on d) (b on c) (c on table) (d on a))
 ((a on table) (b on c) (c on table) (d on a)))

> (possible-states 'b s '(b d table))
(((b on b) (a on table) (c on table) (d on a))
 ((b on d) (a on table) (c on table) (d on a))
 ((b on table) (a on table) (c on table) (d on a)))

> (possible-states 'c s '(b d table))
(((c on b) (a on table) (b on c) (d on a))
 ((c on d) (a on table) (b on c) (d on a))
 ((c on table) (a on table) (b on c) (d on a)))

> (possible-states 'a s '(a b c d table))
(((a on a) (b on c) (c on table) (d on a))
 ((a on b) (b on c) (c on table) (d on a))
 ((a on c) (b on c) (c on table) (d on a))
 ((a on d) (b on c) (c on table) (d on a))
 ((a on table) (b on c) (c on table) (d on a)))

> (possible-states 'b s '(a b c d table))
(((b on a) (a on table) (c on table) (d on a))
 ((b on b) (a on table) (c on table) (d on a))
 ((b on c) (a on table) (c on table) (d on a))
 ((b on d) (a on table) (c on table) (d on a))
 ((b on table) (a on table) (c on table) (d on a)))

> (possible-states 'c s '(a b c d table))
(((c on a) (a on table) (b on c) (d on a))
 ((c on b) (a on table) (b on c) (d on a))
 ((c on c) (a on table) (b on c) (d on a))
 ((c on d) (a on table) (b on c) (d on a))
 ((c on table) (a on table) (b on c) (d on a)))

> (possible-states 'd s '(a b c d table))
(((d on a) (a on table) (b on c) (c on table))
 ((d on b) (a on table) (b on c) (c on table))
 ((d on c) (a on table) (b on c) (c on table))
 ((d on d) (a on table) (b on c) (c on table))
 ((d on table) (a on table) (b on c) (c on table)))

> (possible-states 'table s '(a b c d table))
(((table on a) (a on table)
               (b on c) (c on table) (d on a))
 ((table on b) (a on table)
               (b on c) (c on table) (d on a))
 ((table on c) (a on table)
               (b on c) (c on table) (d on a))
 ((table on d) (a on table)
               (b on c) (c on table) (d on a))
 ((table on table) (a on table)
               (b on c) (c on table) (d on a)))
(defun possible-states (block state dest)
  (let*
      ((current (assoc block state))
       (other (remove current state)))
    (node-remove
     current
     (mapcar
      #'(lambda (d)
          (cons (list block 'on d) other))
      dest))))


generated through LaTeX2HTML. M.Inaba 平成18年5月7日