% Implementation of a depth-first planner. proc(wspdf(N), ?(initializeSitCount) : ?(initializeCPU) : plans(N)). proc(plans(N), ?(goal) : ?(info) : ?(prettyPrintSituation) # ?(N > 0) : pi(a,?(primitive_action(a)) : a) : ?(-badSituation) : ?(incrementSitCount) : pi(n1, ?(n1 is N - 1) : plans(n1))). info :- nl, cputime(T), write(' CPU time (sec): '), getval(cpu,T1), T2 is T - T1, write(T2), getval(sitCount,C), write(' Good situations: '), write(C), nl. initializeSitCount :- setval(sitCount,0). initializeCPU :- cputime(T), setval(cpu,T). incrementSitCount :- incval(sitCount). prettyPrintSituation(S) :- makeActionList(S,Alist), nl, write(Alist), nl. makeActionList(s0,[]). makeActionList(do(A,S), L) :- makeActionList(S,L1), append(L1, [A], L). restoreSitArg(prettyPrintSituation,S,prettyPrintSituation(S)). restoreSitArg(badSituation,S,badSituation(S)). restoreSitArg(goal,S,goal(S)). plandf(N) :- do(wspdf(N),s0,S), askForMore. askForMore :- write('More? '), read(n).