高阶谓词

时间:2013-10-09 10:09:52

标签: prolog higher-order-functions meta-predicate

boolean(true).
boolean(false).
formula_0(P, Q):- (P; Q), \+ P.

solution_for_formula(P, Q, Formula):-
    maplist(boolean, [P, Q]), call([Formula, P, Q]).

我的earlier question的后续行动。为什么这不起作用? (如果我将call([Formula, P, Q])替换为formula_0(P, Q)则可行。)

1 个答案:

答案 0 :(得分:4)

您需要call(Formula, P, Q),而不是call([Formula, P, Q])。只需取下方括号即可。尝试这样可以更清楚地说明错误是什么:

?- write_canonical(call([Formula, P, Q])).
call('.'(_,'.'(_,'.'(_,[]))))
true.

即。使用方括号,您调用(.)/2谓词,您可能(可能)没有定义。但是要调用的高阶谓词是call/3,其参数为call(Closure, Arg1, Arg2)。例如。 call(formula_0, true, false)会致电formula_0(true, false)