在prolog中表达一个等式

时间:2016-10-31 09:13:14

标签: prolog logic equation

事实上给出了连词和否定表。写一个谓词:“解决AX ^ 2 + BX + C = 0是X”。所有值都是布尔值,1 - 真,0 - 假。 事实表是这样的:

c(true, true, true).
c(true, false, false).
c(false, true, false).
c(false, false, false).
n(true, false).
n(false, true).

我不知道该做什么以及从哪里开始。

1 个答案:

答案 0 :(得分:0)

基本上我使用给定的事实编写了一个关于析取的谓词,并使用连接和析取重写了等式。

conjunction(true, true, true).
conjunction(true, false, false).
conjunction(false, true, false).
conjunction(false, false, false).
negation(true, false).
negation(false, true).

disjunction(Bool, Bool2, Result):-negation(Bool, NBool),
                                  negation(Bool2, NBool2),
                                  conjunction(NBool, NBool2, Conj),
                                  negation(Conj, Result).

%X^2 is X*X in this case X^X whis is always equal to X.
equation(A,B,C,X):-conjunction(A, X, AtimesX2),               %A*(X*X)
                   conjunction(B, X, BtimesX),                %B*X
                   disjunction(AtimesX2, BtimesX, AX2plusBX), %A*X^2+B*X
                   disjunction(AX2plusBX, C, Res),            %A*X^2+B*X+C
                   Res = false.                               %Checking if
                                                              %A*X^2+B*X+C is equal to 0