| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | /************************************************************************* | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | *	 YAP Prolog 							 * | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | *	Yap Prolog was developed at NCCUP - Universidade do Porto	 * | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997	 * | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | ************************************************************************** | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | * File:		arrays.yap						 * | 
					
						
							|  |  |  | * Last rev:								 * | 
					
						
							|  |  |  | * mods:									 * | 
					
						
							|  |  |  | * comments:	Array Manipulation					 * | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | *************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | %  | 
					
						
							|  |  |  | % These are the array built-in predicates. They will only work if | 
					
						
							|  |  |  | % YAP_ARRAYS is defined in Yap.h.m4. | 
					
						
							|  |  |  | % | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-14 14:53:44 +00:00
										 |  |  | array(Obj, Size) :- | 
					
						
							|  |  |  | 	'$create_array'(Obj, Size). | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % arithmetical optimization | 
					
						
							|  |  |  | '$c_arrays'((P:-Q),(NP:-QF)) :- !, | 
					
						
							|  |  |  | 	'$c_arrays_body'(Q, QI), | 
					
						
							|  |  |  | 	'$c_arrays_head'(P, NP, QI, QF). | 
					
						
							|  |  |  | '$c_arrays'(P, NP) :- | 
					
						
							|  |  |  | 	'$c_arrays_fact'(P, NP). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | '$c_arrays_body'(P, P) :- | 
					
						
							|  |  |  | 	var(P), !. | 
					
						
							|  |  |  | '$c_arrays_body'((P0,Q0), (P,Q)) :- !, | 
					
						
							|  |  |  | 	'$c_arrays_body'(P0, P), | 
					
						
							|  |  |  | 	'$c_arrays_body'(Q0, Q). | 
					
						
							|  |  |  | '$c_arrays_body'((P0;Q0), (P;Q)) :- !, | 
					
						
							|  |  |  | 	'$c_arrays_body'(P0, P), | 
					
						
							|  |  |  | 	'$c_arrays_body'(Q0, Q). | 
					
						
							|  |  |  | '$c_arrays_body'((P0->Q0), (P->Q)) :- !, | 
					
						
							|  |  |  | 	'$c_arrays_body'(P0, P), | 
					
						
							|  |  |  | 	'$c_arrays_body'(Q0, Q). | 
					
						
							|  |  |  | '$c_arrays_body'(P, NP) :- '$c_arrays_lit'(P, NP). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % | 
					
						
							|  |  |  | % replace references to arrays to references to built-ins. | 
					
						
							|  |  |  | % | 
					
						
							|  |  |  | '$c_arrays_lit'(G, GL) :- | 
					
						
							|  |  |  | 	'$array_references'(G, NG, VL), | 
					
						
							|  |  |  | 	'$add_array_entries'(VL, NG, GL). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | '$c_arrays_head'(G, NG, B, NB) :- | 
					
						
							|  |  |  | 	'$array_references'(G, NG, VL), | 
					
						
							|  |  |  | 	'$add_array_entries'(VL, B, NB). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | '$c_arrays_fact'(G, NG) :- | 
					
						
							|  |  |  | 	'$array_references'(G, IG, VL), | 
					
						
							|  |  |  | 	(VL = [] -> NG = G; | 
					
						
							|  |  |  | 	    NG = (IG :- NB), '$add_array_entries'(VL, true, NB)). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | '$add_array_entries'([], NG, NG). | 
					
						
							|  |  |  | '$add_array_entries'([Head|Tail], G, (Head, NG)) :- | 
					
						
							|  |  |  | 	'$add_array_entries'(Tail, G, NG). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-26 22:28:32 +00:00
										 |  |  | static_array_properties(Name, Size, Type) :- | 
					
						
							|  |  |  | 	atom(Name), !, | 
					
						
							|  |  |  | 	'$static_array_properties'(Name, Size, Type). | 
					
						
							|  |  |  | static_array_properties(Name, Size, Type) :- | 
					
						
							|  |  |  | 	var(Name), !, | 
					
						
							|  |  |  | 	current_atom(Name), | 
					
						
							|  |  |  | 	'$static_array_properties'(Name, Size, Type). | 
					
						
							|  |  |  | static_array_properties(Name, Size, Type) :- | 
					
						
							|  |  |  | 	'$do_error'(type_error(atom,Name),static_array_properties(Name,Size,Type)). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 
 |