47 lines
		
	
	
		
			835 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			835 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | % This file has been included as an YAP library by Vitor Santos Costa, 2008 | ||
|  | 
 | ||
|  | % it is based on the arg library from Quintus Prolog | ||
|  | 
 | ||
|  | :- module(arg, | ||
|  | 	  [ | ||
|  | 	   genarg/3, | ||
|  | 	   arg0/3, | ||
|  | 	   genarg0/3, | ||
|  | 	   args/3, | ||
|  | 	   args0/3, | ||
|  | %	   project/3 | ||
|  | 	   path_arg/3 | ||
|  | 	  ]). | ||
|  | 
 | ||
|  | arg0(0,T,A) :- !, | ||
|  | 	functor(T,A,_). | ||
|  | arg0(I,T,A) :- | ||
|  | 	arg(I,T,A). | ||
|  | 
 | ||
|  | genarg0(I,T,A) :- | ||
|  | 	nonvar(I), !, | ||
|  | 	arg0(I,T,A). | ||
|  | genarg0(0,T,A) :- | ||
|  | 	functor(T,A,_). | ||
|  | genarg0(I,T,A) :- | ||
|  | 	arg(I,T,A). | ||
|  | 
 | ||
|  | args(_,[],[]). | ||
|  | args(I,[T|List],[A|ArgList]) :- | ||
|  | 	genarg(I, T, A), | ||
|  | 	args(I, List, ArgList). | ||
|  | 
 | ||
|  | args0(_,[],[]). | ||
|  | args0(I,[T|List],[A|ArgList]) :- | ||
|  | 	genarg(I, T, A), | ||
|  | 	args0(I, List, ArgList). | ||
|  | 
 | ||
|  | project(Terms, Index, Args) :- | ||
|  | 	args0(Index, Terms, Args). | ||
|  | 
 | ||
|  | % no error checking here! | ||
|  | path_arg([], Term, Term). | ||
|  | path_arg([Index|Indices], Term, SubTerm) :- | ||
|  | 	genarg(Index, Term, Arg), | ||
|  | 	path_arg(Indices, Arg, SubTerm). |