git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@53 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
/************************************************************************/
 | 
						|
/*                                                                      */
 | 
						|
/* Now some examples of using the above definitions ...                 */
 | 
						|
/*                                                                      */
 | 
						|
/************************************************************************/
 | 
						|
 | 
						|
 | 
						|
run :-
 | 
						|
	banner,
 | 
						|
	points,
 | 
						|
	ellipse,
 | 
						|
	lines,
 | 
						|
	circle.
 | 
						|
 | 
						|
 | 
						|
setup_points(P45, P66, AnotherP45, Pm4m3, P00) :-
 | 
						|
	P45 = point(4, 5),
 | 
						|
	P66 = point(6, 6),
 | 
						|
    AnotherP45 = P45,
 | 
						|
	Pm4m3 = point(-4, -3),
 | 
						|
	P00 = point(0, 0).
 | 
						|
 | 
						|
 | 
						|
setup_lines(L1, L2, L3, L4) :-
 | 
						|
    setup_points(P45, P66, _, Pm4m3, P00),
 | 
						|
	L1 = line(P00, P45),
 | 
						|
	L2 = line(Pm4m3, P66),
 | 
						|
	L3 = line(Pm4m3, P45),
 | 
						|
	L4 = line(P00, P66).
 | 
						|
 | 
						|
 | 
						|
banner :-
 | 
						|
    write('Logtalk adaptation of a Ben Staveley-Taylor POEM example.'), nl,
 | 
						|
    write('Original banner:'), nl, nl,
 | 
						|
    nl,
 | 
						|
    write('POEM demonstration file.'), nl, nl,
 | 
						|
    write('The example output that follows is produced by Prolog code'), nl,
 | 
						|
    write('using the object language enhancement POEM.  Please look'), nl,
 | 
						|
    write('through the code file "shapes.pl" provided to understand how'), nl,
 | 
						|
    write('the class facilities are being used.'), nl.
 | 
						|
 | 
						|
 | 
						|
points :-
 | 
						|
    nl,
 | 
						|
    write('(1) point manipulation:'), nl,
 | 
						|
    setup_points(P45, P66, AnotherP45, _, P00),
 | 
						|
    write('distance from (4,5) to (6,6) is '),
 | 
						|
    P45::distance(P66, D),
 | 
						|
    write(D), nl,
 | 
						|
    P45::identical(AnotherP45),
 | 
						|
    write('P45 and AnotherP45 are identical points'), nl,
 | 
						|
    \+ P00::identical(P66),
 | 
						|
    write('P00 and P66 are different points'), nl.
 | 
						|
 | 
						|
 | 
						|
ellipse :-
 | 
						|
    nl,
 | 
						|
    write('(2) ellipse manipulation:'), nl,
 | 
						|
	P56 = point(5, 6),
 | 
						|
	E = ellipse(P56, 3, 5),
 | 
						|
    write('Area of ellipse of semi-axes 3 and 5 is '),
 | 
						|
    E::area(A),
 | 
						|
    write(A), nl.
 | 
						|
 | 
						|
 | 
						|
lines :-
 | 
						|
    nl,
 | 
						|
    write('(3) line manipulation:'), nl,
 | 
						|
    setup_lines( L1, L2, L3, L4 ),
 | 
						|
	P33 = point(3, 3),
 | 
						|
    write('distance from '),write(L2),write(' to '),write(P33),write(' is '),
 | 
						|
    L2::distance(P33, D),
 | 
						|
    write(D), nl,
 | 
						|
    L1::intersects(L2),
 | 
						|
    write(L1), write(' intesects '), write(L2), nl,
 | 
						|
    \+ L3::intersects(L4),
 | 
						|
    write(L3), write(' does not intersect '), write(L4), nl.
 | 
						|
 | 
						|
 | 
						|
circle :-
 | 
						|
    nl,
 | 
						|
    write('(4) circle manipulation:'), nl,
 | 
						|
    write('  Circles are subsets of ellipses, so the "area" function'), nl,
 | 
						|
    write('  is available, and a new "circumference" function.'), nl,
 | 
						|
	P22 = point(2, 2),
 | 
						|
	C = circle(P22, 3),
 | 
						|
    write('Area of circle radius 3 is '),
 | 
						|
    C::area(A),
 | 
						|
    write(A), nl,
 | 
						|
    write('Circumference of circle radius 3 is '),
 | 
						|
    C::circumference(Circ),
 | 
						|
    write(Circ), nl, nl.
 |