> s ((a on table) (b on c) (c on table) (d on a)) > (next-blocks-states s) (((b on table) (a on table) (c on table) (d on a)) ((b on d) (a on table) (c on table) (d on a)) ((d on table) (a on table) (b on c) (c on table)) ((d on b) (a on table) (b on c) (c on table))) > (next-blocks-states '((a on table) (b on c) (c on table))) (((a on b) (b on c) (c on table)) ((b on table) (a on table) (c on table)) ((b on a) (a on table) (c on table))) > (next-blocks-states '((a on table) (b on c) (c on table) (d on a))) (((b on table) (a on table) (c on table) (d on a)) ((b on d) (a on table) (c on table) (d on a)) ((d on table) (a on table) (b on c) (c on table)) ((d on b) (a on table) (b on c) (c on table)))
(defun next-blocks-states (state) (let ((top-free (top-free-blocks state))) (node-remove state (mapcan #'(lambda (free-block) (possible-states free-block state (cons 'table (remove free-block top-free)))) top-free))))) (defun next-states (state) (next-blocks-states state))