53 lines
		
	
	
		
			910 B
		
	
	
	
		
			Perl
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			910 B
		
	
	
	
		
			Perl
		
	
	
	
	
	
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% We use macros because because the
							 | 
						||
| 
								 | 
							
								% bb operations are module specific.
							 | 
						||
| 
								 | 
							
								% Thus the names are relative to the module
							 | 
						||
| 
								 | 
							
								% loading this file
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- module( getval, []).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- multifile
							 | 
						||
| 
								 | 
							
									user:goal_expansion/3.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- dynamic
							 | 
						||
| 
								 | 
							
									user:goal_expansion/3.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								user:goal_expansion( setval(Name,Value), _, bb_put(Name,Value)).
							 | 
						||
| 
								 | 
							
								user:goal_expansion( getval(Name,Value), _, bb_get(Name,Value)).
							 | 
						||
| 
								 | 
							
								user:goal_expansion( incval(Name,New),	 _, Exp) :-
							 | 
						||
| 
								 | 
							
									Exp = (
							 | 
						||
| 
								 | 
							
										bb_get( Name, Old),
							 | 
						||
| 
								 | 
							
										New is Old+1,
							 | 
						||
| 
								 | 
							
										bb_put( Name, New)
							 | 
						||
| 
								 | 
							
									      ).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								user:goal_expansion( decval(Name,New),	 _, Exp) :-
							 | 
						||
| 
								 | 
							
									Exp = (
							 | 
						||
| 
								 | 
							
										bb_get( Name, Old),
							 | 
						||
| 
								 | 
							
										New is Old-1,
							 | 
						||
| 
								 | 
							
										bb_put( Name, New)
							 | 
						||
| 
								 | 
							
									      ).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								end_of_file.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								setval( Name, Value) :- bb_put( Name, Value).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								getval( Name, Value) :- bb_get( Name, Value).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% ++i
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								incval( Name, New) :-
							 | 
						||
| 
								 | 
							
									bb_get( Name, O),
							 | 
						||
| 
								 | 
							
									New is O+1,
							 | 
						||
| 
								 | 
							
									bb_put( Name, New).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								% --i
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								decval( Name, New) :-
							 | 
						||
| 
								 | 
							
									bb_get( Name, O),
							 | 
						||
| 
								 | 
							
									New is O-1,
							 | 
						||
| 
								 | 
							
									bb_put( Name, New).
							 |