1 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]).
Run Code Online (Sandbox Code Playgroud)
对我之前的问题的跟进。为什么这行不通?(如果我call([Formula, P, Q])用formula_0(P, Q)它替换它有效。)
你想要call(Formula, P, Q),没有call([Formula, P, Q])。只需删除方括号。试试这个以更清楚地说明错误是什么:
?- write_canonical(call([Formula, P, Q])).
call('.'(_,'.'(_,'.'(_,[]))))
true.
Run Code Online (Sandbox Code Playgroud)
即使用方括号,您正在调用一个(.)/2您(可能)没有定义的谓词。但是您要调用的高阶谓词是call/3,其参数是call(Closure, Arg1, Arg2)。例如call(formula_0, true, false)会调用formula_0(true, false)。