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]).
我之前的问题的后续行动。为什么这行不通?(如果我call([Formula, P, Q])
用它代替formula_0(P, Q)
它。)
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]).
我之前的问题的后续行动。为什么这行不通?(如果我call([Formula, P, Q])
用它代替formula_0(P, Q)
它。)
你想要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)
.