(defun goal-state (state)
 (equal state '(1 2 3 8 e 4 7 6 5)))

(defun get-state (move)
 (cadr move))

(defun get-direction (move)
 (car move))

(defun same-state (move1 move2)
 (equal (get-state move1) (get-state move2)))

(defun path (pathlist)
 (cdr (reverse (mapcar 'get-direction pathlist))))

(defun remove-redundant (list checklist)
 (cond ((endp list) list)
       ((member (car list) checklist :test #'same-state)
 (remove-redundant (cdr list) checklist))
       (t (cons (car list) (remove-redundant (cdr list) checklist)))))
