Prolog公式解析器

时间:2016-04-26 20:08:45

标签: prolog

我必须编写一个谓词解析(FIn,FOut),它采用包含prolog操作数的逻辑公式" +",","和";"作为参数FIn和包含" not","和"的逻辑公式和"或"而不是prolog操作数作为参数FOut。如果FIn和FOut是等价的,则谓词必须返回true。

例如解析(+(a,b),而不是(和(a,b)))=>真

要检查公式是否被否定,我可以写

parse(FIn, FOut) :- isNeg(FIn, FOut).
isNeg(\+(F1), not(F2)).

但现在我不知道如何检查","和"和"和";"和"或"。 如果有人有一些提示,这将是伟大的。

1 个答案:

答案 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,这样可以很好地编写这种谓词。