@@ -21,6 +21,12 @@ static obj amb_choices_p(obj args)
21
21
return cdar (args );
22
22
}
23
23
24
+ static obj amb_fail_p (obj args )
25
+ {
26
+ (void )args ;
27
+ return error_amb (AREA , "No more choices" );
28
+ }
29
+
24
30
static obj evalstr (char * e , obj env )
25
31
{
26
32
return eceval (readp (openin_string (e )), env );
@@ -263,16 +269,13 @@ static obj ambeval(obj exp, obj exenv, obj succeed, obj fail)
263
269
264
270
obj ambeval2 (obj exp , obj exenv )
265
271
{
272
+ define_variable (of_identifier ("amb-fail" ), of_function (amb_fail_p ),
273
+ exenv );
266
274
obj value = of_identifier ("value" );
267
275
obj fail_s = of_identifier ("fail" );
268
276
obj succeed =
269
277
make_procedure (list2 (value , fail_s ), list1 (value ), emptylst );
270
278
obj fail = make_procedure (
271
- emptylst ,
272
- list1 ( // list2(of_identifier("display"),
273
- // of_string(
274
- // "ERROR: (AMBEVAL) unexpected call to amb2's fail")),
275
- list2 (quote , amb_fail )),
276
- emptylst );
279
+ emptylst , list1 (list1 (of_identifier ("amb-fail" ))), exenv );
277
280
return ambeval (exp , exenv , succeed , fail );
278
281
}
0 commit comments