1 2 :-dynamic frame/3.
3 frame(band, top, [has(songs)]).
4 frame(electric, subclass_of(band), [has(bands, solo)]).
5 frame(blues, subclass_of(electric), [popular(us, uk)]).
6 frame(chicago, subclass_of(blues), [influences(deltablues)]).
7 frame(muddy, instance_of(chicago), [started('1941')]).
8 frame(elmore, instance_of(chicago), [started('1951')]).
9 frame(delta, subclass_of(blues), [originated('1920s')]).
10 frame(robert, instance_of(delta), [songs('Kind Hearted Woman Blues')]).
11 frame(punk, subclass_of(electric), [popular('1970s')]).
12 frame(british, subclass_of(punk), [notable(sexpistols)]).
13 frame(theclash, instance_of(british), [songs('London Calling')]).
14 frame(new_york, subclass_of(punk), [originis('CBGB Club')]).
15 frame(ramones, instance_of(punk), [songs('Blitzkrieg Bop')]).
16 frame(acoustic, subclass_of(band), [has(bands, solo)]).
17 frame(rock, subclass_of(acoustic), [instruments([guitar, drums, stringbass])]).
18 frame(soft, subclass_of(rock), [vocals(highpitch)]).
19 frame(nora, instance_of(soft), [influences(jazz)]).
20 frame(ry, instance_of(soft), [firstnoted('1960s')]).
21 frame(hard, subclass_of(rock), [vocals(heavy)]).
22 frame(john, instance_of(hard), [songs('Sad To Belong')]).
23 frame(richard, instance_of(hard), [origin(unknown)]).
24 frame(folk, subclass_of(acoustic), [instruments([violin, fiddle, viola, melodeon, piano, tenorguitar])]).
25 frame(trad, subclass_of(folk), [madefor(fun)]).
26 frame(ewan, instance_of(trad), [songs('Dirty Old Town')]).
27 frame(eliza, instance_of(trad), [songs('Turpin Hero')]).
28 frame(commercial, subclass_of(folk), [madefor(money)]).
29 frame(roger, instance_of(commercial), [songs('The Argonaut')]).
30
31
35 fadd(Target, Item, Content):-
36 37 NewContent =.. [Item,Content],
38 39 frame(Target, Info, ExistingContent),
40 41 append(ExistingContent, [NewContent], Result),
42 43 retract(frame(Target, Info, ExistingContent)),
44 45 assert(frame(Target, Info, Result)),
46 47 write(Target),write(' frame has been added to. The frame now is:'),nl,
48 write('frame('),write(Target),write(','),write(Info),write(','),write(Result),write(').').
49
50 51 fadd(_, _, _):-
52 53 write('No frame found to add to.').
54
55
61 fchange(Target, Item, Content):-
62
64 RemoveContent =.. [Item, _],
65 66 frame(Target, Info, ExistingContent),
67 68 delete(ExistingContent, RemoveContent, Result1),
69 70 not(ExistingContent=Result1),
71 72 NewContent =.. [Item,Content],
73 74 append([NewContent], Result1, Result2),
75 76 retract(frame(Target, Info, ExistingContent)),
77 78 assert(frame(Target, Info, Result2)),
79 80 write(Target),write(' frame has changed. The frame now is:'),nl,
81 write('frame('),write(Target),write(','),write(Info),write(','),write(Result2),write(').').
82
83 84 fchange(_, _, _):-
85 86 write('Could not find that item.').
87
88
90 fremove(Target, Item):-
91
93 RemoveContent =.. [Item, _],
94 95 frame(Target, Info, ExistingContent),
96 97 delete(ExistingContent, RemoveContent, Result),
98 99 not(ExistingContent=Result),
100 101 retract(frame(Target, Info, ExistingContent)),
102 103 assert(frame(Target, Info, Result)),
104 105 write(Target),write(' frame has had an item removed. The frame now is:'),nl,
106 write('frame('),write(Target),write(','),write(Info),write(','),write(Result),write(').').
107
108 109 fremove(_, _):-
110 111 write('Could not find that item.').
112
113 114 fdelete(Target):-
115 116 retract(frame(Target, instance_of(_), _)),
117 118 write('The instance of '),write(Target),write(' has now been deleted.').
119
120 121 fdelete(Target):-
122 123 frame(Target, subclass_of(_), _),
124 125 write('You cannot delete subclasses, only instances.').
126
127 128 fdelete(_):-
129 130 write('Instance not found.').
131
132
134 fask(Target, Item):-
135 136 write(Target),write(' '),
137 138 fask(Target, Item, []).
139
140
142 fask(Target, _, History):-
143 144 member(Target, History),
145 146 nl,write('Error: Loop detected.').
147
148 149 fask(Target, Item, _):-
150 151 frame(Target, _, ItemList),
152 153 member(Item, ItemList),
154 155 write('which '),write(Item).
156
157
160 fask(Target, Item, History):-
161 162 frame(Target, Relation, _),
163 164 Relation=..[Type, Parent],
165 166 write(Type),write(' '),write(Parent),write(' '),
167 168 fask(Parent, Item, [Target|History]).
169