序言。 "if-else" 的编译出现错误

Prolog. Error occurs in the compilation of "if-else"

我有一个小问题-我没有写"if - else."需要检查长边是否是三角形。 这是我的代码,但编译器在 "A < B + C" - "E;Test_Goal, pos: 465, 406 ')' or ',' expected" 中的比较符号“<”中指示错误 非常感谢您的帮助。

PREDICATES
equal(integer,integer,integer)
isTriangle(integer,integer,integer)

CLAUSES 

/*isTriangle(A,B,C):-
    ( A < B + C ->
        ( B < A + C ->
            ( C < A + B ->
                writeln("It is triangle"),
                fail
            ;   C >= A + B ->
                write("It is not triangle!")
            )
            fail
        ;   B >= A + C ->
            write("It is not triangle!")
        )
        fail
    ;   A >= B + C ->
        write("It is not triangle!")
    )*/

isTriangle(A,B,C):-
    ( (A < B + C; B < A + C; C < A + B) -> writeln("It is triangle")
    ; (A >= B + C; B >= A + C; C >= A + B) -> write("It is not triangle!")
    )

equal(A,B,C):-  
    isTriangle(A,B,C),
    A = B,
    B = C,
    C = A.

GOAL
equal(3,0,3).

我认为 Visual Prolog 不支持 ISO Prolog 运算符,->/2。您可以尝试重构您的谓词:

isTriangle(A,B,C):-
    ( (A < B + C; B < A + C; C < A + B) -> writeln("It is triangle")
    ; (A >= B + C; B >= A + C; C >= A + B) -> write("It is not triangle!")
    )

为此:

isTriangle(A, B, C):-
    (A < B + C; B < A + C; C < A + B),
    write("It is not triangle!").
isTriangle(A, B, C):-
    (A >= B + C; B >= A + C; C >= A + B),
    write("It is not triangle!").

但是,对于任何三角形 ABC所有 的不等式都必须成立,这不是真的吗?所以它真的应该是:

isTriangle(A, B, C):-
    A < B + C,
    B < A + C,
    C < A + B,
    write("It is not triangle!").
isTriangle(A, B, C):-
    (A >= B + C; B >= A + C; C >= A + B),
    write("It is not triangle!").

或者,您可以使用剪切。我更喜欢上面的方法而不是使用 cut,但是如果 Visual Prolog(它在很多方面偏离标准 Prolog)不喜欢括号语句分组:

isTriangle(A, B, C):-
    A < B + C,
    B < A + C,
    C < A + B, !,
    write("It is not triangle!").
isTriangle(A, B, C):-
    write("It is not triangle!").