, Prolog Prolog, . Prolog, , " () , ".
, . foo - . foo(A, B) - . foo(bar(X), bah(Y,Z)) - ( foo/2), bar/1 ( ) bah/2 ( ).
Head :- Body ':-'(Head, Body). Prolog ( ), Prolog , Prolog , :- . ':-'(A, B) - " " .
Prolog, (, :-, ..) , , , , ( "" ?), .
, (X, Y). . , "".
Prolog point(X, Y) - (point/2), ( ), , , , . point(X, Y) Prolog :
?- point(1, 2).
Prolog , point(1, 2) . , , :
?- foo(point(1, 2)).
foo/1 , foo(_) point(1, 2), " " , , , . , foo/1 foo(a). , foo/1, foo(point(1, 2)). , Prolog a ( ) point(1, 2Y) ( ) , . foo/1, :
foo(X) :-
X = point(A,B),
... % do some things involving A and B
foo(point(1,2)) , X point(1,2), point(1, 2) = point(A, B) A = 1 B = 2 .. point/2 - .
, foo/1:
foo(X) :-
call(X),
...
, , foo(point(1, 2))., foo/1 point(1, 2) ( ), Prolog , point(1, 2).
, (X, Y) !
, . , . Prolog, , . line(A, B), a, B. , , point(X, Y), line(point(X1, Y1), point(X2, Y2)). , (X1, Y1), (X2, Y2).
, .
, " ". , , () . , line(point(X1, Y1), point(X2, Y2)), ( ) (X1, Y1) (X2, Y2).
, " ", true false, .
. " ", true false. . Prolog, , . , , , Prolog ( /), . . , line(point(X1, Y1), point(X2, Y2)), Prolog , line(_, _), . , .
? "" 2 (), , .
line(point(X,Y), point(X,Z)) - , (X, Y) (X, Z).
?
, . , , .
, "point (X, Y)" "point".
. , X Y.
, " ".
line/2 , , ( ). line(P1, P2), "" ( , [X, Y] , , , point(X, Y)).
, , , .
? , , , .
</" > - , - , . , , point(X, Y), , line(P1, P2), P1 P2 - . , line(point(X1, Y1), point(X2, Y2)). .
Prolog? point(X, Y). X Y? ? , . , point:
valid_point(P) :-
P = point(X, Y), % a Point looks like point(X, Y)
number(X),
number(Y).
Prolog , :
valid_point(point(X, Y)) :-
number(X),
number(Y).
So valid_point(point(X, Y)) , X Y - . Prolog, (point(3, 5.2) ( valid_point(point(3, 5.2))., (, "" ). Prolog, point(a, 3) ( valid_point(point(a, 3))., (, "" ).
. , line(P1, P2), P1 P2 , . . , , :
valid_line(Line) :-
Line = line(P1, P2),
P1 = point(X1, Y1), % P1 is a valid point
valid_point(P1),
P2 = point(X2, Y2), % P2 is a valid point
valid_point(P2),
( X1 =\= X2 ; Y1 =\= Y2 ).
, Prolog , :
valid_line(line(point(X1, Y1), point(X2, Y2))) :-
valid_point(point(X1, Y1)),
valid_point(point(X2, Y2),
( X1 =\= X2 ; Y1 =\= Y2 ).
, point(X1, Y1) point(X2, Y2) , , X1, X2 , Y1 Y2 .
. , . , vertical_line, , :
vertical_line(line(point(X1, Y1), point(X2, Y2)) :-
valid_line(line(point(X1, Y1), point(X2, Y2)),
X1 = X2.
, :
vertical_line(line(point(X, Y1), point(X, Y2))) :-
valid_line(line(point(X, Y1), point(X, Y2)).
structre. valid_line/1, line/2 . , , , . , Prolog , . , point/2, , :
point(X, Y) :-
number(X),
number(Y).
:
?- point(1, 3).
true
?- point(a, 7).
false.
, line/2:
line(P1, P2) :-
P1 = point(X1, Y1),
P2 = point(X2, Y2),
( X1 =\= X2 ; Y1 =\= Y2 ).
( point/2) P1 = point(X1, Y1). , Prolog . , line(point(a, 3), point(c, d)), , , , (=\=)/2. P1 = point(X1, Y1) '='(P1, point(X1, Y1)) Prolog. , Prolog , , '=', point(X1, Y1) " " . point/2 :
line(P1, P2) :-
P1 = point(X1, Y1),
call(P1),
P2 = point(X2, Y2),
call(P2),
( X1 =\= X2 ; Y1 =\= Y2 ).
Prolog ( point/2, ). , , valid_... .