(declaim(optimize(speed0)(space0)(debug3)))(ql:quickload:lisp-unit)(use-package:lisp-unit)(setf*print-failures*t)(defstructopnameprereqgainlose)(defparameter*demo-ops-skeleton*`((A(s1)(s2)(s1))(B(s2)(s3)(s2))))(defunop-it-1(lst)(make-op:name(firstlst):prereq(secondlst):gain(thirdlst):lose(fourthlst)))(defunconvert-op(x)"Adds (executing op) to the list of things you gain."(push(list'executing(op-namex))(op-gainx))x)(defunmake-op+(x)(convert-op(op-it-1x)))(defunmake-oplist(xs)(mapcar#'make-op+xs))(defparameter*demo-ops*(make-oplist*demo-ops-skeleton*))(defun(unimplx)(format*debug-io*"You need to implement ~a"x)nil);;; ;;; BEGINNING OF CODE YOU NEED TO WRITE;;;;; TODO (defunmember-*(xxs)(unimpl'member-*))(defunset-equalp(xy)(set-equalxy:test#'equalp));; TODO(defunremove-*(subtractall)"Remove using equalp SUBTRACT from ALL, returning remaining ALL."(unimpl'remove-*));; TODO(defunall-achieved(wantedgot)(unimpl'all-achieved));; TODO (defunapply-op(statethe-op)(unimpl'apply-op));; TODO(defunappropriate-p(oopgoals)(unimpl'appropriate-p));; TODO (defunfind-appropriate-1(opsgoal)(unimpl'find-appropriate-1));;;;;; ---- TESTING -----;;;(defparameter*test-big-ops*(make-oplist'((a(s1)(s2)(s1))(b(s1)(s3)(s1))(c(s1)(s4)(s1))(d(s2)(s3)(s2))(e(s4)(s1big)(s4))(f(s3)(s5)(s3))(g(s2)(s1)(s2)))))(defvar*ops**test-big-ops*"Operations to use to achieve the goals.")(define-testtest-stage-1"Verify simple functions work."(assert-equalp(make-op:name'a:prereq'(s1):gain'((executinga)s2):lose'(s1))(first*test-big-ops*))(assert-true(appropriate-p(first*test-big-ops*)'(s2)))(assert-true(appropriate-p(fifth*test-big-ops*)'(big)))(assert-false(appropriate-p(fifth*test-big-ops*)'(s2)))(assert-equalp(list(fifth*test-big-ops*)(seventh*test-big-ops*))(find-appropriate-1*test-big-ops*'s1))(assert-equality#'set-equalp'(s1big(executinge))(apply-op'(s4)(fifth*test-big-ops*)))(assert-equality#'set-equalp'(startdone(good5)(bad3)(executingworks))(apply-op'(start(middle4))(make-op+'(works(start(middle4))((bad3)(good5)done)((middle4)))))))