git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2091 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			47 lines
		
	
	
		
			835 B
		
	
	
	
		
			Prolog
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			835 B
		
	
	
	
		
			Prolog
		
	
	
	
	
	
| % 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).
 |