git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1162 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			114 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| =================================================================
 | |
| Logtalk - Object oriented extension to Prolog
 | |
| Release 2.21.2
 | |
| 
 | |
| Copyright (c) 1998-2004 Paulo Moura.  All Rights Reserved.
 | |
| =================================================================
 | |
| 
 | |
| 
 | |
| % start by loading the example:
 | |
| 
 | |
| | ?- logtalk_load(loader).
 | |
| ...
 | |
| 
 | |
| 
 | |
| % solver - a simple meta-interpreter for pure Prolog:
 | |
| 
 | |
| | ?- solver::assertz(member_of(H, [H| _])).
 | |
| 
 | |
| H = _G178 
 | |
| yes
 | |
| 
 | |
| | ?- solver::assertz((member_of(H, [_| T]) :- member_of(H, T))).
 | |
| 
 | |
| H = _G181
 | |
| T = _G179 
 | |
| yes
 | |
| 
 | |
| | ?- solver::solve(member_of(2, [1,2,3])).
 | |
| 
 | |
| yes
 | |
| 
 | |
| | ?- solver::solve(member_of(X, [1,2,3])).
 | |
| 
 | |
| X = 1 ;
 | |
| X = 2 ;
 | |
| X = 3
 | |
| yes
 | |
| 
 | |
| 
 | |
| % proof_tree - a simple meta-interpreter for pure Prolog that 
 | |
| % construct a proof tree:
 | |
| 
 | |
| | ?- proof_tree::assertz(member_of(H, [H| _])).
 | |
| 
 | |
| H = _G178 
 | |
| yes
 | |
| 
 | |
| | ?- proof_tree::assertz((member_of(H, [_| T]) :- member_of(H, T))).
 | |
| 
 | |
| H = _G181
 | |
| T = _G179 
 | |
| yes
 | |
| 
 | |
| | ?- proof_tree::solve(member_of(2, [1,2,3]), Tree).
 | |
| 
 | |
| Tree = member_of(2, [1, 2, 3]):- (member_of(2, [2, 3]):-true) 
 | |
| yes
 | |
| 
 | |
| 
 | |
| % tracer - a simple meta-interpreter for tracing goal proofs 
 | |
| % using pure Prolog:
 | |
| 
 | |
| 
 | |
| | ?- tracer::assertz(member_of(H, [H| _])).
 | |
| 
 | |
| H = _G178 
 | |
| yes
 | |
| 
 | |
| | ?- tracer::assertz((member_of(H, [_| T]) :- member_of(H, T))).
 | |
| 
 | |
| H = _G181
 | |
| T = _G179 
 | |
| yes
 | |
| 
 | |
| | ?- tracer::trace(member_of(3, [1,2,3])).
 | |
| 
 | |
| 1 call: member_of(3, [1, 2, 3])
 | |
| 2 call: member_of(3, [2, 3])
 | |
| 3 call: member_of(3, [3])
 | |
| 3 exit: member_of(3, [3])
 | |
| 2 exit: member_of(3, [2, 3])
 | |
| 1 exit: member_of(3, [1, 2, 3])
 | |
| yes
 | |
| 
 | |
| | ?- tracer::trace(member_of(X, [1,2,3])).
 | |
| 
 | |
| 1 call: member_of(_G187, [1, 2, 3])
 | |
| 1 exit: member_of(1, [1, 2, 3])
 | |
| 
 | |
| X = 1 ;
 | |
| 1 redo: member_of(1, [1, 2, 3])
 | |
| 2 call: member_of(_G187, [2, 3])
 | |
| 2 exit: member_of(2, [2, 3])
 | |
| 1 exit: member_of(2, [1, 2, 3])
 | |
| 
 | |
| X = 2 ;
 | |
| 1 redo: member_of(2, [1, 2, 3])
 | |
| 2 redo: member_of(2, [2, 3])
 | |
| 3 call: member_of(_G187, [3])
 | |
| 3 exit: member_of(3, [3])
 | |
| 2 exit: member_of(3, [2, 3])
 | |
| 1 exit: member_of(3, [1, 2, 3])
 | |
| 
 | |
| X = 3 ;
 | |
| 1 redo: member_of(3, [1, 2, 3])
 | |
| 2 redo: member_of(3, [2, 3])
 | |
| 3 redo: member_of(3, [3])
 | |
| 4 call: member_of(_G187, [])
 | |
| 4 fail: member_of(_G187, [])
 | |
| 3 fail: member_of(_G187, [3])
 | |
| 2 fail: member_of(_G187, [2, 3])
 | |
| 1 fail: member_of(_G187, [1, 2, 3])
 | |
| no
 |