git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1799 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			121 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| =================================================================
 | |
| Logtalk - Object oriented extension to Prolog
 | |
| Release 2.29.4
 | |
| 
 | |
| Copyright (c) 1998-2007 Paulo Moura.  All Rights Reserved.
 | |
| =================================================================
 | |
| 
 | |
| 
 | |
| % start by loading the necessary library support files (if not 
 | |
| % already loaded):
 | |
| 
 | |
| | ?- logtalk_load([library(hierarchies_loader), library(types_loader)]).
 | |
| ...
 | |
| 
 | |
| 
 | |
| % now you are ready for loading the example:
 | |
| 
 | |
| | ?- logtalk_load(sicstus(loader)).
 | |
| ...
 | |
| 
 | |
| 
 | |
| % try some simple queries:
 | |
| 
 | |
| 
 | |
| | ?- sort(rational)::sort([1/8, 2/7, 6/5, 2/9, 1/3], Sorted).
 | |
| 
 | |
| Sorted = [1/8, 2/9, 2/7, 1/3, 6/5]
 | |
| yes
 | |
| 
 | |
| 
 | |
| | ?- sort(colours)::sort([orange, indigo, red, yellow, violet, blue, green], Sorted).
 | |
| 
 | |
| Sorted = [red, orange, yellow, green, blue, indigo, violet]
 | |
| yes
 | |
| 
 | |
| 
 | |
| % using the pseudo-object user implies using the Prolog built-in standard 
 | |
| % order operators:
 | |
| 
 | |
| | ?- sort(user)::sort([3, 1, 4, 2, 9], Sorted).
 | |
| 
 | |
| Sorted = [1, 2, 3, 4, 9]
 | |
| yes
 | |
| 
 | |
| 
 | |
| % some messages testing object parameter passing and using:
 | |
| 
 | |
| | ?- red_circle(3)::color(Color).
 | |
| 
 | |
| Color = red
 | |
| yes
 | |
| 
 | |
| 
 | |
| | ?- red_circle(3)::area(Area).
 | |
| 
 | |
| Area = 28.274334
 | |
| yes
 | |
| 
 | |
| 
 | |
| | ?- red_circle(3)::ancestors(As).
 | |
| 
 | |
| As = [circle(3, red), ellipse(3, 3, red)]
 | |
| yes
 | |
| 
 | |
| 
 | |
| % show the execution context using a method (context/3) that is defined in the
 | |
| % hierarchy root and specialized (using super calls) in each descendant:
 | |
| 
 | |
| | ?- red_circle(3)::context.
 | |
| 
 | |
| red_circle1
 | |
| self: red_circle(3)
 | |
| this: red_circle(3)
 | |
| sender: user
 | |
| 
 | |
| circle2
 | |
| self: red_circle(3)
 | |
| this: circle(3,red)
 | |
| sender: user
 | |
| 
 | |
| ellipse3
 | |
| self: red_circle(3)
 | |
| this: ellipse(3,3,red)
 | |
| sender: user
 | |
| 
 | |
| yes
 | |
| 
 | |
| 
 | |
| % send a conjunction of messages/goals to an object; just some useful syntax 
 | |
| % sugar:
 | |
| 
 | |
| | ?- square(2)::(side(Side), width(Width), height(Height), area(Area)).
 | |
| 
 | |
| Side = 2
 | |
| Width = 2
 | |
| Height = 2
 | |
| Area = 4
 | |
| yes
 | |
| 
 | |
| 
 | |
| % find all messages accepted by an object:
 | |
| 
 | |
| | ?- square(2)::current_predicate(Pred).
 | |
| 
 | |
| Pred = side/1 ; 
 | |
| Pred = width/1 ;
 | |
| Pred = height/1 ;
 | |
| Pred = area/1
 | |
| yes
 | |
| 
 | |
| 
 | |
| % find all data on a specific message accepted by an object:
 | |
| 
 | |
| | ?- square(_)::predicate_property(side(_), Prop).
 | |
| 
 | |
| Prop = public ;
 | |
| Prop = static ;
 | |
| Prop = declared_in(square(_133)) ;
 | |
| Prop = defined_in(square(_164))
 | |
| yes
 |