Reputation: 3
I have a small problem - I did not get to write "if - else." Need to check on the long side if it is a triangle or not. Here is my code, but the compiler indicates an error in the comparison sign "<" in "A < B + C" - "E;Test_Goal, pos: 465, 406 ')' or ',' expected" I would be very grateful for the help.
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).
Upvotes: 0
Views: 411
Reputation: 58244
I don't believe Visual Prolog supports the ISO Prolog operator, ->/2
. You can try refactoring your predicate from this:
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!")
)
To this:
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!").
But isn't it true that, for any triangle ABC
that all of the inequalities must hold? So it really should be:
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!").
Alternatively, you could use a cut. I prefer the above approach to using a cut, but in case Visual Prolog (which deviates from standard Prolog in many ways) doesn't like parenthetical statement groupings:
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!").
Upvotes: 1