% file: ts.p % desc: parsing a template system % with simplification rules :- consult('sr.p'). :- consult('process.p'). % =========================================================== % geometric data base surfaces(block,6). surfaces(pyramid,5). surfaces(frustum,3). surfaces(cone,2). % =========================================================== % retrieval operations % am_holding/2(?Property,?Object) :- dynamic am_holding/2. am_holding(null,nothing). % pickup/2(+Property,+Object) pickup(Property,Object) :- am_holding(_,nothing), retract(am_holding(_,nothing)), assert(am_holding(Property,Object)), write('Got it.'), nl. % putdown/2(+Property,+Object) putdown(Property,Object) :- am_holding(Property,Object), retract(am_holding(Property,Object)), assert(am_holding(null,nothing)), write('Okay, I put down the '), write(Object), write('.'), nl. display_object(Adj1,Obj) :- write(Adj1), write_string(" "), write(Obj). display_holdings :- am_holding(Property,Object), display_object(Property,Object). display_specs(Obj) :- surfaces(Obj,N), write(N). % =========================================================== % translation templates % ----------------------------------------------------------- % interpret/1 % interpret([quit,'!']) :- abort. % if quit! is in source lang % ----- pickup ----- interpret([pick, Color, Shape, '.']) :- pickup(Color,Shape), !. interpret([pick, _, _, '.']) :- write_string("can't do it, got this "), display_holdings, nl. % ----- putdown ----- interpret([put, Color, Shape, '.']) :- putdown(Color,Shape), !. interpret([put, Color, Shape, '.']) :- write_string("can't do it, don't got no "), display_object(Color,Shape). % ----- information on ----- interpret([what, number, surfaces, Color, Shape, '?']) :- am_holding(Color,Shape), !, write_string("the "), display_object(Color,Shape), write_string(" has "), display_specs(Shape), !, write_string(" surfaces."), nl. interpret(_) :- write_string("say what?"), nl.