> 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))))