truncate_lh_to(LhLength) :- '$truncate_lh_to'(LhLength).
-check_for_compat_list(L, PI) :-
- ( nonvar(L), L \= [_|_], throw(error(type_error(list, L), PI))
- ; true
- ).
-
findall(Template, Goal, Solutions) :-
- check_for_compat_list(Solutions, findall/3),
+ error:can_be(list, Solutions),
'$lh_length'(LhLength),
'$call_with_default_policy'(catch('$iterate_find_all'(Template, Goal, Solutions, LhLength),
Error,
findall(Template, Goal, Solutions0, Solutions1) :-
- check_for_compat_list(Solutions0, findall/4),
- check_for_compat_list(Solutions1, findall/4),
+ error:can_be(list, Solutions0),
+ error:can_be(list, Solutions1),
'$lh_length'(LhLength),
'$call_with_default_policy'(catch('$iterate_find_all_diff'(Template, Goal, Solutions0,
Solutions1, LhLength),
iterate_variants(GroupSolutions, Ws, Solution).
bagof(Template, Goal, Solution) :-
- check_for_compat_list(Solution, bagof/3),
+ error:can_be(list, Solution),
term_variables(Template, TemplateVars0),
term_variables(Goal, GoalVars0),
sort(TemplateVars0, TemplateVars),
iterate_variants_and_sort(GroupSolutions, Ws, Solution).
setof(Template, Goal, Solution) :-
- check_for_compat_list(Solution, setof/3),
+ error:can_be(list, Solution),
term_variables(Template, TemplateVars0),
term_variables(Goal, GoalVars0),
sort(TemplateVars0, TemplateVars),
assert_prolog_success!(&mut wam, "?- findall(X, (X = 1 ; X = 2), S).",
[["S = [1, 2]", "X = _0"]]);
assert_prolog_success!(&mut wam, "?- findall(X+Y, (X = 1), S).",
- [["S = [1+_33]", "X = _1", "Y = _2"]]);
+ [["S = [1+_36]", "X = _1", "Y = _2"]]);
assert_prolog_success!(&mut wam, "?- findall(X, false, S).",
[["S = []", "X = _0"]]);
assert_prolog_success!(&mut wam, "?- findall(X, (X = 1 ; X = 1), S).",
assert_prolog_success!(&mut wam, "?- bagof(X, (X=Y; X=Z; Y=1), L).",
[["L = [_3, _6]", "X = _0", "Y = _3", "Z = _6"],
- ["L = [_178]", "X = _0", "Y = 1", "Z = _6"]]);
+ ["L = [_184]", "X = _0", "Y = 1", "Z = _6"]]);
submit(&mut wam, "a(1, f(_)). a(2, f(_)).");
assert_prolog_success!(&mut wam, "?- bagof(X, a(X, Y), L).",
- [["L = [1, 2]", "X = _0", "Y = f(_144)"]]);
+ [["L = [1, 2]", "X = _0", "Y = f(_150)"]]);
assert_prolog_success!(&mut wam, "?- setof(X, (X = 1 ; X = 2), S).",
[["S = [1, 2]", "X = _0"]]);
["L = [1]", "Y = 2"]]);
assert_prolog_success!(&mut wam, "?- setof(X, (X=Y; X=Z; Y=1), L).",
[["L = [_3, _6]", "X = _0", "Y = _3", "Z = _6"],
- ["L = [_178]", "X = _0", "Y = 1", "Z = _6"]]);
+ ["L = [_184]", "X = _0", "Y = 1", "Z = _6"]]);
assert_prolog_failure!(&mut wam, "?- setof(X, member(X, [f(U,b),f(V,c)]), [f(a,c),f(a,b)]).");
assert_prolog_success!(&mut wam, "?- setof(X, member(X, [f(U,b),f(V,c)]), [f(a,b),f(a,c)]).",
[["U = a", "V = a", "X = _0"]]);
assert_prolog_success!(&mut wam, "?- findall(X, (X = 1 ; X = 2), S0, S1).",
[["S0 = [1, 2 | _11]", "S1 = _11", "X = _0"]]);
assert_prolog_success!(&mut wam, "?- findall(X+Y, (X = 1), S0, S1).",
- [["S0 = [1+_38 | _7]", "S1 = _7", "X = _1", "Y = _2"]]);
+ [["S0 = [1+_44 | _7]", "S1 = _7", "X = _1", "Y = _2"]]);
assert_prolog_success!(&mut wam, "?- findall(X, false, S, _).",
[["S = []", "X = _0"]]);
assert_prolog_success!(&mut wam, "?- findall(X, (X = 1 ; X = 1), S0, S1).",