> (depth-first *blocks-graph* '((b on c) (a on b) (c on table)) '((a on table) (b on c) (c on a))) nilこのようになって,パスがないという答えが返ってきてしまいます. それは当然であって,node-equalに与える関数がequalだからです. そこで,ここでグラフの頂点の比較はリスト表現された ものの集合であるということから,集合が等しいかどうかを判定する 関数set=を使って,
(defun node-equal (a b) (set= a b))と定義します.
> (depth-first *blocks-graph* '((b on c) (a on b) (c on table)) '((a on table) (b on c) (c on a))) (((b on c) (a on b) (c on table)) ((a on table) (b on c) (c on table)) ((a on table) (b on table) (c on table)) ((a on table) (b on table) (c on b)) ((a on table) (b on table) (c on a)) ((a on table) (b on c) (c on a)))という結果になり,無事探索が成功しました.