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)
则可行。)
答案 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)
。