@@ -39,11 +39,14 @@ bool test1()
39
39
State<Thing, Mortal> state{things, {}};
40
40
41
41
// Apply rule
42
- RuleSet< decltype (rule1)> rules{ rule1} ;
42
+ auto rules = ruleset ( rule1) ;
43
43
44
44
cout << " before = " << state << endl;
45
45
state = fixPoint (rules, state);
46
46
cout << " after = " << state << endl;
47
+
48
+ deleteVar (x);
49
+
47
50
return true ;
48
51
}
49
52
@@ -74,9 +77,9 @@ bool test2()
74
77
{rod, alan},
75
78
{robin, alan}};
76
79
77
- auto x = var <Name>();
78
- auto y = var <Name>();
79
- auto z = var <Name>();
80
+ auto x = new Variable <Name>();
81
+ auto y = new Variable <Name>();
82
+ auto z = new Variable <Name>();
80
83
81
84
// TODO
82
85
// auto inDirectAcademicAncestor = atom<AcademicAncestor>(x, z) <= atom<Adviser>(x, y) && atom<AcademicAncestor>(y, z);
@@ -92,15 +95,17 @@ bool test2()
92
95
);
93
96
94
97
// Apply rules
98
+ auto rules = ruleset (directAcademicAncestor, indirectAcademicAncestor, query);
95
99
State<Adviser, AcademicAncestor, QueryResult> state{advisers, {}, {}};
96
- RuleSet<decltype (directAcademicAncestor), decltype (indirectAcademicAncestor), decltype (query)> rules{
97
- {directAcademicAncestor, indirectAcademicAncestor, query}
98
- };
99
100
100
101
cout << " before = " << state << endl;
101
102
state = fixPoint (rules, state);
102
103
cout << " after = " << state << endl;
103
104
105
+ delete x;
106
+ delete y;
107
+ delete z;
108
+
104
109
return true ;
105
110
}
106
111
@@ -117,21 +122,21 @@ bool po1()
117
122
118
123
State<Check, In, A> state{check, in, {}};
119
124
120
- auto a = var <Number>();
121
- auto b = var <Number>();
122
- auto c = var <Number>();
123
- auto d = var <Number>();
124
- auto e = var <Number>();
125
- auto f = var <Number>();
126
- auto i = var <Number>();
127
- auto anon1 = var <Number>();
128
- auto anon2 = var <Number>();
129
- auto anon3 = var <Number>();
130
- auto anon4 = var <Number>();
131
- auto anon5 = var <Number>();
132
- auto anon6 = var <Number>();
133
- auto anon7 = var <Number>();
134
- auto anon8 = var <Number>();
125
+ auto a = new Variable <Number>();
126
+ auto b = new Variable <Number>();
127
+ auto c = new Variable <Number>();
128
+ auto d = new Variable <Number>();
129
+ auto e = new Variable <Number>();
130
+ auto f = new Variable <Number>();
131
+ auto i = new Variable <Number>();
132
+ auto anon1 = new Variable <Number>();
133
+ auto anon2 = new Variable <Number>();
134
+ auto anon3 = new Variable <Number>();
135
+ auto anon4 = new Variable <Number>();
136
+ auto anon5 = new Variable <Number>();
137
+ auto anon6 = new Variable <Number>();
138
+ auto anon7 = new Variable <Number>();
139
+ auto anon8 = new Variable <Number>();
135
140
136
141
// A(1,i) :- Check(_, b, c, d, e, f), In(_, b, c, d, e, f, i).
137
142
auto rule1 = rule (atom<A>(1u , i), atom<Check>(anon1, b, c, d, e, f), atom<In>(anon2, b, c, d, e, f, i));
@@ -172,10 +177,8 @@ bool po1()
172
177
// A(19, i) :- Check(a, b, c, d, e, f), In(a, b, c, d, e, f, i).
173
178
auto rule19 = rule (atom<A>(19u , i), atom<Check>(a, b, c, d, e, f), atom<In>(a, b, c, d, e, f, i));
174
179
175
- RuleSet<decltype (rule1), decltype (rule2), decltype (rule3), decltype (rule4), decltype (rule5), decltype (rule6), decltype (rule7), decltype (rule8), decltype (rule9), decltype (rule10), decltype (rule11), decltype (rule12), decltype (rule13), decltype (rule14), decltype (rule15), decltype (rule16), decltype (rule17), decltype (rule18), decltype (rule19)>
176
- rules{
177
- {rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9, rule10, rule11, rule12, rule13, rule14, rule15, rule16, rule17, rule18, rule19}
178
- };
180
+ auto rules = ruleset (rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9, rule10, rule11, rule12, rule13,
181
+ rule14, rule15, rule16, rule17, rule18, rule19);
179
182
180
183
// cout << "before = " << state << endl;
181
184
state = fixPoint (rules, state);
@@ -188,6 +191,22 @@ bool po1()
188
191
operator << <A>(cout, computedA);
189
192
cout << endl;
190
193
194
+ delete a;
195
+ delete b;
196
+ delete c;
197
+ delete d;
198
+ delete e;
199
+ delete f;
200
+ delete i;
201
+ delete anon1;
202
+ delete anon2;
203
+ delete anon3;
204
+ delete anon4;
205
+ delete anon5;
206
+ delete anon6;
207
+ delete anon7;
208
+ delete anon8;
209
+
191
210
return computedA == aOut;
192
211
}
193
212
#endif
@@ -220,10 +239,10 @@ bool test4()
220
239
{sally, 40u , female, netherlands}
221
240
};
222
241
223
- auto name = var <Name>();
224
- auto age = var <Age>();
225
- auto gender = var <Gender>();
226
- auto country = var <Country>();
242
+ auto name = new Variable <Name>();
243
+ auto age = new Variable <Age>();
244
+ auto gender = new Variable <Gender>();
245
+ auto country = new Variable <Country>();
227
246
228
247
struct Female : Relation<Name>{};
229
248
auto females = rule (
@@ -234,7 +253,7 @@ bool test4()
234
253
typedef float Metres;
235
254
struct Height : Relation<Name, Metres>{};
236
255
237
- auto height = var <Metres>();
256
+ auto height = new Variable <Metres>();
238
257
239
258
auto heights = rule (
240
259
atom<Height>(name, 1 .0f ),
@@ -243,16 +262,16 @@ bool test4()
243
262
)
244
263
);
245
264
246
- # if 0
265
+
247
266
// Use this pattern to get at values too
248
267
auto anyPerson = atom<Person>(name, age, gender, country);
249
268
250
- auto externalHeights = rule(
269
+ auto externalHeights1 = rule (
251
270
atom<Height>(name, height),
252
271
body (
253
272
atom<Person>(name, age, gender, country)
254
273
),
255
- external (
274
+ lambda (
256
275
height,
257
276
[&anyPerson]() {
258
277
cout << " hello world!" << endl;
@@ -262,32 +281,36 @@ bool test4()
262
281
}
263
282
)
264
283
);
265
- # else
284
+
266
285
// Use this pattern to get at variables (values can't be got directly)
267
286
auto externalHeights = rule (
268
287
atom<Height>(name, height),
269
288
body (atom<Person>(name, age, female, country)),
270
- lambda (height, [&age]() { return val ( age) * 3 .0f ; } )
289
+ lambda (height, [&age]() { return age-> value ( ) * 3 .0f ; } )
271
290
);
272
- #endif
273
291
274
292
// Apply rules
293
+ auto rules = ruleset (females, heights, externalHeights);
275
294
State<Person, Female, Height> state{people, {}, {}};
276
- RuleSet<decltype (females), decltype (heights), decltype (externalHeights)> rules{
277
- {females, heights, externalHeights}
278
- };
279
295
280
296
cout << " before = " << state << endl;
281
297
state = fixPoint (rules, state);
282
298
cout << " after = " << state << endl;
283
299
300
+ delete name;
301
+ delete age;
302
+ delete gender;
303
+ delete country;
304
+ delete height;
305
+
284
306
return true ;
285
307
}
286
308
287
309
int main ()
288
310
{
289
311
bool ok1 = test1 ();
290
312
bool ok2 = test2 ();
313
+ #if 1
291
314
bool ok3 = po1 ();
292
315
bool ok4 = test4 ();
293
316
@@ -298,5 +321,6 @@ int main()
298
321
cout << " PASSED" << endl;
299
322
return 0 ;
300
323
}
324
+ #endif
301
325
return 1 ;
302
326
}
0 commit comments