我必须编写一个谓词解析(FIn,FOut),它采用包含prolog操作数的逻辑公式" +",","和";"作为参数FIn和包含" not","和"的逻辑公式和"或"而不是prolog操作数作为参数FOut。如果FIn和FOut是等价的,则谓词必须返回true。
例如解析(+(a,b),而不是(和(a,b)))=>真
要检查公式是否被否定,我可以写
parse(FIn, FOut) :- isNeg(FIn, FOut).
isNeg(\+(F1), not(F2)).
但现在我不知道如何检查","和"和"和";"和"或"。 如果有人有一些提示,这将是伟大的。
答案 0 :(得分:0)
以下是翻译的谓词,
(;
类似)
% translates (a, b, c, ...) to and(a, and(b, and(c, ...)))
parse(A, A) :- atom(A).
parse((A, B), and(Ao, Bo)) :-
parse(A, Ao),
parse(B, Bo).
% translates (a, b, c, ...) to and(a, b, c, ...)
parse1(A, A) :- atom(A).
parse1((A, B), O) :-
parse1(A, Ao),
parse1(B, Bo),
Bo =.. [and | R],
O =.. [and, Ao | R], !.
parse1((A, B), O) :-
parse1(A, Ao),
parse1(B, Bo),
O =.. [and, Ao, Bo].
Prolog是homoiconic,这样可以很好地编写这种谓词。