19
21
23memorize(Figment, M0, M1) :- notrace(append([Figment], M0, M1)).
24memorize_list(FigmentList, M0, M1) :- notrace((must_be(list,FigmentList),dmust(append(FigmentList, M0, M1)))).
25forget(Figment, M0, M1) :- select(Figment, M0, M1).
26forget_always(Figment, M0, M1) :- select_always(Figment, M0, M1).
29thought(Figment, M) :- member(Figment, M).
30
31
34
36
38update_relation(Spatial, NewHow, Item, NewParent, Timestamp, M0, M2) :-
39 select_always(h(Spatial, _How, Item, _Where, _T), M0, M1),
40 append([h(Spatial, NewHow, Item, NewParent, Timestamp)], M1, M2).
41
43update_relations(_Spatial, _NewHow, [], _NewParent, _Timestamp, M, M).
44update_relations(Spatial, NewHow, [Item|Tail], NewParent, Timestamp, M0, M2) :-
45 update_relation(Spatial, NewHow, Item, NewParent, Timestamp, M0, M1),
46 update_relations(Spatial, NewHow, Tail, NewParent, Timestamp, M1, M2).
47
50update_model_exit(Spatial, How, From, Timestamp, M0, M2) :-
51 select(h(Spatial, How, From, To, _T), M0, M1),
52 append([h(Spatial, How, From, To, Timestamp)], M1, M2).
53update_model_exit(Spatial, How, From, Timestamp, M0, M1) :-
54 append([h(Spatial, How, From, '<unexplored>', Timestamp)], M0, M1).
55
56update_model_exit(Spatial, How, From, To, Timestamp, M0, M2) :-
57 select_always(h(Spatial, How, From, _To, _T), M0, M1),
58 append([h(Spatial, How, From, To, Timestamp)], M1, M2).
59
60update_model_exits(_Spatial, [], _From, _T, M, M).
61update_model_exits(Spatial, [Exit|Tail], From, Timestamp, M0, M2) :-
62 update_model_exit(Spatial, Exit, From, Timestamp, M0, M1),
63 update_model_exits(Spatial, Tail, From, Timestamp, M1, M2).
64
68
74
75update_model(Spatial, Agent, carrying(Spatial, Objects), Timestamp, _Memory, M0, M1) :-
76 update_relations(Spatial, held_by, Objects, Agent, Timestamp, M0, M1).
77update_model(Spatial, _Agent, notice_children(Sense, Object, How, Children), Timestamp, _Mem, M0, M1) :-
78 sensory_model(Sense, Spatial),
79 update_relations(Spatial, How, Children, Object, Timestamp, M0, M1).
80update_model(_Spatial, _Agent, sense_props(see, Object, PropList), Stamp, _Mem, M0, M2) :-
81 select_always(props(Object, _, _), M0, M1),
82 append([props(Object, PropList, Stamp)], M1, M2).
83
84update_model(Spatial, _Agent,
85 sense(Sense, [you_are(Spatial, How, Here), exits_are(Exits), here_are(Objects)]),
86 Timestamp, _Mem, M0, M4) :-
87 sensory_model(Sense, Spatial),
88 89 update_relations(Spatial, How, Objects, Here, Timestamp, M0, M3), 90 findall(exit(E), member(E, Exits), ExitRelations),
91 update_model_exits(Spatial, ExitRelations, Here, Timestamp, M3, M4). 92
93
94update_model(Spatial, Agent, moved(Spatial, Agent, There, How, Here), Timestamp, Mem, M0, M2) :-
95 96 in_model(h(Spatial, _, Agent, There, _T0), M0),
97 98 99 append(RecentMem, [did(goto(Spatial, _HowGo, ExitName))|OlderMem], Mem), 100 \+ member(did(goto(Spatial, _, _)), RecentMem), 101 memberchk(timestamp(_T1), OlderMem), 102 103 104 update_model_exit(Spatial, exit(ExitName), There, Here, Timestamp, M0, M1), 105 update_relation(Spatial, How, Agent, Here, Timestamp, M1, M2). 106
107update_model(Spatial, _Agent, moved(Spatial, Object, _From, How, To), Timestamp, _Mem, M0, M1) :-
108 update_relation(Spatial, How, Object, To, Timestamp, M0, M1).
109
110update_model(_Spatial, _Agent, failure(_), _Timestamp, _Mem, M0, M0) :- !.
111
112update_model(Spatial, Agent, time_passes, Timestamp, _Memory, M, M):-
113 nop(dbug(unused_update_model(Spatial, Agent, time_passes, Timestamp, M))).
114
115update_model(_Spatial, _Agent, [], _Timestamp, _Memory, M, M).
116update_model(Spatial, Agent, [Percept|Tail], Timestamp, Memory, M0, M2) :-
117 update_model(Spatial, Agent, Percept, Timestamp, Memory, M0, M1),
118 update_model_all(Spatial, Agent, Tail, Timestamp, Memory, M1, M2).
119
120
121update_model(Spatial, Agent, Percept, Timestamp, _Memory, M, M):-
122 dbug(failed_update_model(Spatial, Agent, Percept, Timestamp)).
123
125update_model_all(_Spatial, _Agent, [], _Timestamp, _Memory, M, M).
126update_model_all(Spatial, Agent, [Percept|Tail], Timestamp, Memory, M0, M2) :-
127 update_model(Spatial, Agent, Percept, Timestamp, Memory, M0, M1),
128 update_model_all(Spatial, Agent, Tail, Timestamp, Memory, M1, M2)