1
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)它。)

4

1 回答 1

5

你想要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).

于 2013-10-09T10:23:06.257 回答