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 : 		eval . c 							 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  Last  rev : 								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  mods : 									 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  comments : 	arithmetical  expression  evaluation 			 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* 									 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifdef SCCS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  char      SccsId [ ]  =  " %W% %G% " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/**
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   @ file  arith0 . c 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   @ defgroup  arithmetic_operators  Arithmetic  Functions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   @ ingroup  arithmetic 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-06 13:58:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								   YAP  implements  several  arithmetic  functions ,  they  are  defined  as 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   fields  in  three  enumerations ,  such  that  there  is  one  enumeration 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   per  each  different  arity :   
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    -  # arith0_op  defines  constants  and  arity  0  arithmetic  functions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @ copydoc  # arith0_op 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    -  # arith1_op  defines  single  argument  arithmetic  functions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @ copydoc  # arith1_op 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    -  # arith2_op  defines  binary  arithmetic  functions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @ copydoc  # arith2_op 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Arithmetic  expressions 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  in  YAP  may  use  the  following  operators : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > pi  [ ISO ] < / b > < p >  @ anchor  pi_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     An  approximation  to  the  value  of  < em > pi < / em > ,  that  is ,  the  ratio  of  a  circle ' s  circumference  to  its  diameter . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > e < / b > < p >     @ anchor  e_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     Euler ' s  number ,  the  base  of  the  natural  logarithms . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > epsilon < / b > < p >   @ anchor  epsilon_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     The  difference  between  the  float  ` 1.0 `  and  the  next  largest  floating  point  number . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > inf < / b > < p >   @ anchor  inf_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     Infinity  according  to  the  IEEE  Floating - Point  standard .  Note  that  evaluating  this  term  will  generate  a  domain  error  in  the  ` iso `  language  mode . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     Note  also  that  YAP  supports  ` + inf `  and   ` - inf ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > nan  ( not  a  number ) < / b > < p >   @ anchor  nan_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     Not - a - number  according  to  the  IEEE  Floating - Point  standard .  Note  that  evaluating  this  term  will  generate  a  domain  error  in  the  ` iso `  language  mode . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > random < / b > < p >   @ anchor  random_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     A  " random "  floating  point  number  between  0  and  1. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > cputime < / b > < p >   @ anchor  cputime_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     CPU  time  since  YAP  was  invoked ,  in  seconds . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > heapused < / b > < p >   @ anchor  heapused_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     Heap  ( data - base )  space  used ,  in  bytes . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > local < / b > < p >   @ anchor  local_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     Local  stack  in  use ,  in  bytes 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > $ b < / b > < p >   @ anchor  b_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     current  choicepoint 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > $ env < / b > < p >   @ anchor  env_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     Environment 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > $ tr < / b > < p >   @ anchor  tr_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     Trail  in  use 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > $ free_stack < / b > < p >   @ anchor  free_stack_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     Amount  of  free  stack  space ,  that  is ,  free  space  between  global  and  local  stacks . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   -  < b > global < / b > < p >   @ anchor  global_0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     Global  stack  in  use ,  in  bytes . 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "Yap.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "Yatom.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-23 14:22:17 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "YapHeap.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# include  "eval.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef PI 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifdef M_PI 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define PI M_PI 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define PI 3.14159265358979323846 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef M_E 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define M_E 2.7182818284590452354 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef INFINITY 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define INFINITY (1.0 / 0.0) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef NAN 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define NAN      (0.0 / 0.0) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-10-20 09:21:59 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/* copied from SWI-Prolog */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef DBL_EPSILON  /* normal for IEEE 64-bit double */ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define DBL_EPSILON 0.00000000000000022204 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  Term 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								eval0 ( Int  fi )  { 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-07 16:02:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  CACHE_REGS 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  arith0_op  fop  =  fi ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  switch  ( fop )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  op_pi : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      RFLOAT ( PI ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  op_e : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      RFLOAT ( M_E ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-20 09:21:59 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  case  op_epsilon : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      RFLOAT ( DBL_EPSILON ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  case  op_inf : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# ifdef _MSC_VER  /* Microsoft's Visual C++ Compiler */ 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      Yap_Error ( TYPE_ERROR_EVALUABLE ,  TermNil ,  " evaluating infinity " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      P  =  ( yamop  * ) FAILCODE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      RERROR ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      if  ( yap_flags [ LANGUAGE_MODE_FLAG ]  = =  1 )  { /* iso */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									Yap_Error ( TYPE_ERROR_EVALUABLE ,  TermNil ,  " evaluating infinity " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									P  =  ( yamop  * ) FAILCODE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									RERROR ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									RFLOAT ( INFINITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  op_nan : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef _MSC_VER  /* Microsoft's Visual C++ Compi<ler */ 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      Yap_Error ( TYPE_ERROR_EVALUABLE ,  TermNil ,  " evaluating infinity " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      P  =  ( yamop  * ) FAILCODE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      RERROR ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( yap_flags [ LANGUAGE_MODE_FLAG ]  = =  1 )  { /* iso */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									Yap_Error ( TYPE_ERROR_EVALUABLE ,  TermNil ,  " evaluating not-a-number " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									P  =  ( yamop  * ) FAILCODE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									RERROR ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									RFLOAT ( NAN ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  op_random : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      RFLOAT ( Yap_random ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  op_cputime : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      RFLOAT ( ( Float ) Yap_cputime ( ) / 1000.0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  op_heapused : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /// - heapused
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///   Heap (data-base) space used, in bytes.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( HeapUsed ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  case  op_localsp : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /// - local
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///   Local stack in use, in bytes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-30 15:32:59 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if YAPOR_SBA 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( ( Int ) ASP ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( LCL0  -  ASP ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  case  op_b : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /// - $b
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///   current choicepoint
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-30 15:32:59 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if YAPOR_SBA 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( ( Int ) B ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( LCL0  -  ( CELL  * ) B ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  case  op_env : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /// - $env
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///   Environment
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-30 15:32:59 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if YAPOR_SBA 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( ( Int ) YENV ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-12-17 18:31:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( LCL0  -  YENV ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-01-07 06:28:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  case  op_tr : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /// - $tr
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///   Trail in use
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-30 15:32:59 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if YAPOR_SBA 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( TR ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-01-07 06:28:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( ( ( CELL  * ) TR ) - LCL0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-12-17 18:31:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  case  op_stackfree : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /// - $free_stack
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///   
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    /// Not-a-number according to the IEEE Floating-Point standard. Note that evaluating this term will generate a domain error in the `iso` language mode.
 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-19 21:15:05 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( Unsigned ( ASP )  -  Unsigned ( HR ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  case  op_globalsp : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /// - global
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///   Global stack in use, in bytes.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ///
 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-30 15:32:59 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if YAPOR_SBA 
 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-19 21:15:05 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( ( Int ) HR ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-19 21:15:05 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    RINT ( HR  -  H0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  /// end of switch
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  RERROR ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Term  Yap_eval_atom ( Int  f ) 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  return  eval0 ( f ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								typedef  struct  init_const_eval  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  char           * OpName ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  arith0_op       f ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								}  InitConstEntry ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  InitConstEntry  InitConstTab [ ]  =  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  { " pi " ,  op_pi } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " e " ,  op_e } , 
							 
						 
					
						
							
								
									
										
										
										
											2009-10-20 09:21:59 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  { " epsilon " ,  op_epsilon } , 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  { " inf " ,  op_inf } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " nan " ,  op_nan } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " random " ,  op_random } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " cputime " ,  op_cputime } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " heapused " ,  op_heapused } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " local_sp " ,  op_localsp } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " global_sp " ,  op_globalsp } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " $last_choice_pt " ,  op_b } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " $env " ,  op_env } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " $tr " ,  op_tr } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { " stackfree " ,  op_stackfree } , 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								void 
							 
						 
					
						
							
								
									
										
										
										
											2002-11-18 18:18:05 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Yap_InitConstExps ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  unsigned  int     i ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  ExpEntry        * p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  for  ( i  =  0 ;  i  <  sizeof ( InitConstTab ) / sizeof ( InitConstEntry ) ;  + + i )  { 
							 
						 
					
						
							
								
									
										
										
										
											2002-11-18 18:18:05 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    AtomEntry  * ae  =  RepAtom ( Yap_LookupAtom ( InitConstTab [ i ] . OpName ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2005-03-01 22:25:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( ae  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Yap_Error ( OUT_OF_HEAP_ERROR , TermNil , " at InitConstExps " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    WRITE_LOCK ( ae - > ARWLock ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2002-11-18 18:18:05 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( Yap_GetExpPropHavingLock ( ae ,  0 ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								      WRITE_UNLOCK ( ae - > ARWLock ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2002-11-18 18:18:05 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    p  =  ( ExpEntry  * )  Yap_AllocAtomSpace ( sizeof ( ExpEntry ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    p - > KindOfPE  =  ExpProperty ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    p - > ArityOfEE  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    p - > ENoOfEE  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-04 23:33:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    p - > FOfEE  =  InitConstTab [ i ] . f ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-17 11:16:21 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    AddPropToAtom ( ae ,  ( PropEntry  * ) p ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    WRITE_UNLOCK ( ae - > ARWLock ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/* This routine is called from Restore to make sure we have the same arithmetic operators */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								int 
							 
						 
					
						
							
								
									
										
										
										
											2002-11-18 18:18:05 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Yap_ReInitConstExps ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2005-10-31 12:27:54 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  return  TRUE ; 
							 
						 
					
						
							
								
									
										
										
										
											2001-04-09 19:54:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 11:14:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/// @}