(defun sss (s prev ops) ; state, prev states,
(let ((op (pop ops))) ; op = next ops to try
(if (goal? s) ; if s is a goal,
'() ; answer = list of no ops
(if (or (failure? s) (null op))
'failure
(if (applicable? op s)
(let ((new (apply-op op s)))
; if it duplicates a prev state
(if (member new prev :test #'equal)
; try the next op
(sss s prev ops)
; else try to search from new
(let ((opseq (sss new
(cons s prev)
*ops*)))
; if search failed
(if (eq opseq 'failure)
; try the next op
(sss s prev ops)
; else cons op onto answer
(cons op opseq)))))
; try another op
(sss s prev ops))))))
Contents    Page-10    Prev    Next    Page+10    Index