(defun ml (state) (second state)) ; m on left
(defun mr (state) (- *mtotal* (second state)))
(defun m (s) (if (boat s) (ml s) (mr s)))
(defun applicable? (op s)
(and (< = (op-m op) (m s)) (< = (op-c op) (c s))))
; Test for failure: c > m > 0 on either side.
(defun failure? (s)
(or (> (cl s) (ml s) 0)
(> (cr s) (mr s) 0) ) )
(defun goal? (s) ; 0 mis and 0 can on left
(and (= (ml s) 0) (= (cl s) 0) ) )
(defun apply-op (op s) ; apply op => new state
(if (boat s)
(list nil (- (ml s) (op-m op))
(- (cl s) (op-c op)))
(list t (+ (ml s) (op-m op))
(+ (cl s) (op-c op))) ))
Contents    Page-10    Prev    Next    Page+10    Index