Next: 15 CLOSのクラスシステムの実現
Up: 14 探索プログラムの実現
Previous: 14.4 迷路の問題
積み木の世界の問題は同様に以下のように書くことができます.
(defclass block-node (node)
((state :initarg :state :accessor state)))
(defun init-block nil
(setq *block-graph*
(make-instance
'graph
:nodes
(list
(make-instance 'block-node
:name "s1"
:state
'((a on table) (b on table)
(c on table)))
(make-instance 'block-node
:name "s2"
:state
'((a on table) (b on c)
(c on table)))
(make-instance 'block-node
:name "s3"
:state
'((a on table) (b on a)
(c on table)))
(make-instance 'block-node
:name "s4"
:state
'((a on c) (b on table)
(c on table)))
(make-instance 'block-node
:name "s5"
:state
'((a on b) (b on table)
(c on table)))
(make-instance 'block-node
:name "s6"
:state
'((a on table) (b on table)
(c on b)))
(make-instance 'block-node
:name "s7"
:state
'((a on table) (b on table)
(c on a)))
(make-instance 'block-node
:name "s8"
:state
'((a on b) (b on c)
(c on table)))
(make-instance 'block-node
:name "s9"
:state
'((a on table) (b on a)
(c on b)))
(make-instance 'block-node
:name "s10"
:state
'((a on c) (b on a)
(c on table)))
(make-instance 'block-node
:name "s11"
:state
'((a on b) (b on table)
(c on a)))
(make-instance 'block-node
:name "s12"
:state
'((a on c) (b on table)
(c on b)))
(make-instance 'block-node
:name "s13"
:state
'((a on table) (b on c)
(c on a)))
)))
(put-arc *block-graph* "s1" "s2")
(put-arc *block-graph* "s1" "s3")
(put-arc *block-graph* "s1" "s4")
(put-arc *block-graph* "s1" "s5")
(put-arc *block-graph* "s1" "s6")
(put-arc *block-graph* "s1" "s7")
(put-arc *block-graph* "s2" "s8")
(put-arc *block-graph* "s2" "s3")
(put-arc *block-graph* "s3" "s9")
(put-arc *block-graph* "s4" "s10")
(put-arc *block-graph* "s5" "s11")
(put-arc *block-graph* "s6" "s12")
(put-arc *block-graph* "s6" "s7")
(put-arc *block-graph* "s7" "s13")
)
(defun block-test nil
(init-block)
(setq dp (find-route
*block-graph*
"s8" "s13" 'depth-first))
(setq bp (find-route
*block-graph*
"s8" "s13" 'breadth-first))
nil)
<cl> (block-test)
DEPTH-FIRST Search from s8 to s13:
(s8 s2 s3 s1 s7 s13)
BREADTH-FIRST Search from s8 to s13:
(s8 s2 s1 s7 s13)
generated through LaTeX2HTML. M.Inaba 平成18年5月6日