序言。 "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!").
我有一个小问题-我没有写"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!").