19
23
25
26
27:- defn_state_getter(get_perceptq_objects(-list(inst))). 28get_perceptq_objects(Objects, S0):-
29 setof(O,member(perceptq(O,_),S0),Objects).
30
31get_sensing_objects(Sense, Agents, S0):-
32 get_objects((has_sense(Sense);inherited(memorize)), Agents, S0).
33
34:- defn_state_getter(get_live_agents(-list(agent))). 35get_live_agents(LiveAgents, S0):-
36 get_some_agents( \+ powered=f, LiveAgents, S0).
37
38:- defn_state_getter(get_some_agents(conds,-list(agent))). 39get_some_agents(Precond, LiveAgents, S0):-
40 must_det((
41 get_objects(
42 (inherited(character),Precond), LiveAgents, S0),
43 LiveAgents \== [])).
44
45
46
47sense_here(_Sense, _In, _Here, _S0):-!.
48sense_here(Sense, _In, Here, S0):-
49 getprop(Here, TooDark, S0),
50 (sensory_problem_solution(Sense, TooDark, EmittingLight) ->
51 related_with_prop(Sense, _Obj, Here, EmittingLight, S0) ; true).
52
53can_sense_here(Agent, Sense, S0) :-
54 from_loc(Agent, Here, S0),
55 sense_here(Sense, in, Here, S0), !.
56can_sense_here(_Agent, _Sense, _State) .
57
58is_star(Star):- Star == '*'.
59is_star('*'(Star)):- nonvar(Star).
60
61can_sense(Agent, Sense, Thing, S0, S9):- can_sense(Agent, Sense, Thing, S0),S9=S0.
62:- defn_state_getter(can_sense(agent,sense,thing)). 63can_sense(_Agent, _See, Star, _State) :- is_star(Star), !.
64can_sense(Agent, Sense, Thing, S0) :- Agent == Thing, !, can_sense_here(Agent, Sense, S0).
65can_sense(_Agent, Sense, Here, S0) :-
66 getprop(Here, has_rel(exit(_),t), S0),
67 sense_here(Sense, in, Here, S0),!.
68
69can_sense(Agent, Sense, Thing, S0) :-
70 can_sense_here(Agent, Sense, S0),
71 from_loc(Agent, Here, S0),
72 (Thing=Here; open_traverse(Thing, Here, S0)), !.
79can_sense(Agent, Sense, Thing, _State):-
80 bugout1(pretending_can_sense(Agent, Sense, Thing, Agent)),!.
81
82
83
84send_precept(Agent, Event, S0, S2) :-
85 declared(perceptq(Agent, _Q), S0), !,
86 queue_agent_percept(Agent, Event, S0, S2).
87send_precept(Agent, Event, S0, S2) :-
88 do_precept_list(Agent, Event, S0, S2).
89
90do_precept_list(Agent, Events, S0, S2) :-
91 undeclare(memories(Agent, Mem0), S0, S1),
92 thought(timestamp(Stamp,_OldNow), Mem0),
93 with_agent_console(Agent,process_percept_list(Agent, Events, Stamp, Mem0, Mem3)),
94 declare(memories(Agent, Mem3), S1, S2).
95
98:- nop(ensure_loaded('adv_events')). 100
101:- defn_state_setter(queue_agent_percept(agent,listok(event))). 103queue_agent_percept(Agent, Event, S0, S2) :-
104 \+ is_list(Event),!,
105 queue_agent_percept(Agent, [Event], S0, S2).
107queue_agent_percept(Agent, Events, S0, S2) :-
108 getprop(Agent, inherited(no_perceptq), S0), !,
109 do_precept_list(Agent, Events, S0, S2).
110queue_agent_percept(Agent, Events, S0, S2) :-
111 must_det((select(perceptq(Agent, Queue), S0, S1),
112 append(Queue, Events, NewQueue),
113 append([perceptq(Agent, NewQueue)], S1, S2))).
114
115
116:- defn_state_setter(queue_event(listok(event))). 117queue_event(Event, S0, S2) :-
118 each_sensing_thing(_All, queue_agent_percept(Event), S0, S2).
119
120
121locally__agent_percept__(Agent, Event, Places, S0, S1) :-
122 member(Where, Places),can_sense(Agent,_,Where,S0),!,
123 queue_agent_percept(Agent, Event, S0, S1),!.
124locally__agent_percept__(_Agent, _Event, _Places, S0, S0).
125
126
128:- defn_state_setter(queue_local_event(listof(event),listof(place))). 129queue_local_event(Event, Places) --> {\+ is_list(Places)}, !, queue_local_event(Event, [Places]).
130queue_local_event(Event, Places) -->
131 each_sensing_thing(_All, locally__agent_percept__(Event, Places)).
132
133
134
135
136is_sense(X):- sensory_verb(X, _).
137
138sensory_verb(see, look).
139sensory_verb(hear, listen).
140sensory_verb(taste, taste).
141sensory_verb(smell, smell).
142sensory_verb(touch, feel).
143
144
145action_sensory(Action, Sense):-
146 compound(Action),
147 Action=..[_Verb, Sensory|_],
148 is_sense(Sensory), !,
149 Sense=Sensory.
150action_sensory(Action, Sense):-
151 compound(Action),
152 Action=..[Verb|_],
153 verb_sensory(Verb, Sense).
154action_sensory(Action, Sense):-
155 verb_sensory(Action, Sense) *-> true; Sense=see.
156
157
159verb_sensory(goto, Sense):- is_sense(Sense).
160verb_sensory(examine, Sense):- is_sense(Sense).
161verb_sensory(wait, Sense):- is_sense(Sense).
162verb_sensory(print_, Sense):- is_sense(Sense).
163verb_sensory(Verb, Sense):- sensory_verb(Sense, Verb).
164verb_sensory(look, see).
165verb_sensory(say, hear).
166verb_sensory(eat, taste).
167verb_sensory(feel, touch).
168verb_sensory(goto, see).
169verb_sensory(Verb, Sense):- nonvar(Verb), is_sense(Verb), Sense=Verb.
170verb_sensory(Verb, Sense):- subsetof(Verb, Verb2), Verb\=Verb2,
171 verb_sensory(Verb2, Sense), \+ is_sense(Verb).
172verb_sensory(Verb, Sense):- verb_alias(Verb, Verb2), Verb\=Verb2,
173 verb_sensory(Verb2, Sense), \+ is_sense(Verb).
174
175
176
178sensory_problem_solution(Sense, Dark = t, emitting(Sense, Light)):-
179 problem_solution(Dark, Sense, Light).
180
181problem_solution(dark, see, light).
182problem_solution(stinky, smell, purity).
183problem_solution(noisy, hear, quiet).
184
185
186:- defn_state_setter(percept_todo(list(action))). 187percept_todo(Actions, Mem0, Mem2):- add_todo_all(Actions, Mem0, Mem2),!.
189
192:- nop(ensure_loaded('adv_agent_percepts')). 194
195
199
200:- defn_state_setter(process_percept_auto//3). 201process_percept_auto(_Agent, msg(_), _Stamp, M0, M0) :- !.
202process_percept_auto(_Agent, [], _Stamp, M0, M0) :- !.
203process_percept_auto(Agent, [Percept|Tail], Stamp, M0, M9) :-
204 process_percept_auto(Agent, Percept, Stamp, M0, M1),
205 process_percept_auto(Agent, Tail, Stamp, M1, M9).
206
207process_percept_auto(Agent, Percept, _Stamp, M0, M0) :- was_own_self(Agent, Percept),!.
208
210process_percept_auto(Agent, percept(Agent, Sense, Depth, child_list(_Here, _Prep, Objects)), _Stamp, Mem0, Mem2) :-
211 agent_thought_model(Agent, _ModelData, Mem0), Depth > 1,
212 213 DepthLess is Depth - 1,
214 findall( sub__examine(Agent, Sense, child, Obj, DepthLess),
215 ( member(Obj, Objects),
216 Obj \== Agent), 217 Actions),
218 percept_todo(Actions, Mem0, Mem2).
219
220process_percept_auto(_Agent, _Percept, _Timestamp, M0, M0):- \+ declared(inherited(autonomous), M0),!.
221
223process_percept_auto(Agent, emoted(Speaker, EmoteType, Agent, Words), _Stamp, Mem0, Mem1) :-
224 trace, consider_text(Speaker,EmoteType, Agent, Words, Mem0, Mem1).
225process_percept_auto(Agent, emoted(Speaker, EmoteType, Star, WordsIn), _Stamp, Mem0, Mem1) :- is_star(Star),
226 addressing_whom(WordsIn, Whom, Words),
227 Whom == Agent,
228 consider_text(Speaker,EmoteType, Agent, Words, Mem0, Mem1).
229
231process_percept_auto(Agent, percept_props(Agent, Sense, Object, Depth, PropList), _Stamp, Mem0, Mem2) :-
232 Depth > 1,
233 (member(inherited(shiny), PropList)),
234 Object \== Agent,
235 bugout3('~w: ~p~n', [Agent, percept_props(Agent, Sense, Object, Depth, PropList)], autonomous),
236 agent_thought_model(Agent,ModelData, Mem0),
237 \+ h(descended, Object, Agent, ModelData), 238 add_todo_all([take(Agent, Object), print_(Agent, 'My shiny precious!')], Mem0, Mem2).
239
240
241process_percept_auto(_Agent, _Percept, _Stamp, M0, M0).
242
243addressing_whom(List, Agent, Words):- Words = [_|_], append(Words,[Agent],List).
244addressing_whom(List, Agent, Words):- Words = [_|_], append(_,[Agent|Words],List).
245
246
248was_own_self(Agent, emote(Agent, _, _Targ, _)).
249was_own_self(Agent, emoted(Agent, _, _Targ, _)).
251
252:- defn_state_setter(process_percept_player//3). 254process_percept_player(Agent, _Percept, _Stamp, Mem0, Mem0) :- \+ is_player(Agent),!.
255process_percept_player(_, [], _Stamp, Mem0, Mem0) :- !.
256process_percept_player(Agent, [Percept|Tail], Stamp, Mem0, Mem4) :- !,
257 process_percept_player(Agent, Percept, Stamp, Mem0, Mem1),
258 process_percept_player(Agent, Tail, Stamp, Mem1, Mem4).
259process_percept_player(Agent,Percept, _Stamp, Mem0, Mem0) :- was_own_self(Agent, Percept),!.
260process_percept_player(_Agent, precept(_,Know,_,_Percept), _Stamp, Mem0, Mem0) :- Know == know, !.
261process_percept_player(Agent1, precept(Agent2,_,_,_), _Stamp, Mem0, Mem0) :- Agent1 \== Agent2, !.
264process_percept_player(Agent, Percept, _Stamp, Mem0, Mem0) :-
265 percept2txt(Agent, Percept, Text),!, player_format('~N~w~n', [Text]),!.
266
267process_percept_player(Agent, Percept, _Stamp, M0, M0) :-
268 player_format(Agent, '~N~q~n', [Agent:Percept]).
269
270is_player(Agent):- \+ is_non_player(Agent).
271is_non_player(Agent):- Agent == floyd.
272
273
274:- defn_state_setter(process_percept_main//3). 276process_percept_main(_Agent, [], _Stamp, Mem0, Mem0) :- !.
277process_percept_main(Agent, Percept, Stamp, Mem0, Mem2) :-
278 quietly(process_percept_player(Agent, Percept, Stamp, Mem0, Mem1)),
279 process_percept_auto(Agent, Percept, Stamp, Mem1, Mem2).
280process_percept_main(Agent, Percept, Stamp, Mem0, Mem0):-
281 bugout3('~q FAILED!~n', [bprocess_percept(Agent, Percept, Stamp)], perceptq), !.
282
283
284:- defn_state_setter(process_percept_list(agent, list(event), tstamp)). 285process_percept_list(Agent, Percept, Stamp, Mem0, Mem3) :-
286 \+ is_list(Percept),!, process_percept_list(Agent, [Percept], Stamp, Mem0, Mem3).
288process_percept_list(_Agent, _, _Stamp, Mem, Mem) :-
289 declared(inherited(memorize_perceptq), Mem),
290 !.
291process_percept_list(Agent, Percept, Stamp, Mem0, Mem3) :-
292 must_det((
293 append(Percept, Mem0, PerceptMem),
294 each_update_model(Agent, Percept, Stamp, PerceptMem, Mem0, Mem2),
295 process_percept_main(Agent, Percept, Stamp, Mem2, Mem3))),!.
296process_percept_list(_Agent, Percept, _Stamp, Mem0, Mem0) :-
297 bugout3('process_percept_list(~w) FAILED!~n', [Percept], todo), !