home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 5
/
DATAFILE_PDCD5.iso
/
utilities
/
b
/
binprolog
/
!BinPro330
/
library
/
stacks
< prev
Wrap
Text File
|
1994-08-27
|
1KB
|
52 lines
/* new stack package, working fine with bb_gc */
bb_def_stack(Stack):-bb_def(Stack,'$top',0).
bb_push(Stack,Ob):-
val(Stack,'$top',I),!,
I1 is I+1,
bb_def(Stack,I1,Ob),
bb_set(Stack,'$top',I1).
bb_push(Stack,_):-
errmes('undefined stack',Stack).
bb_pop(Stack,Ob):-
bb_val(Stack,'$top',I),
bb_val(Stack,I,Ob),
I>0,I1 is I-1,!,
bb_rm(Stack,I),
bb_set(Stack,'$top',I1).
bb_pop(Stack,_):-
errmes('stack underflow',stack(Stack)).
bb_stack(Stack,List):-
val(Stack,'$top',Top),
findall(X,bb_stack_member(Stack,Top,X),List).
bb_stack_member(Stack,Max,Elem):-
for(I,1,Max),
val(Stack,I,Elem).
bb_stack_rm(Stack):-
val(Stack,'$top',Top),bb_rm(Stack,'$top'),
for(I,1,Top),
bb_rm(Stack,I),
fail.
bb_stack_rm(_).
/* old stacks: for compatibility only */
push(Type,S,X):-val(Type,S,Xs),!,bb_set(Type,S,[X|Xs]).
push(Type,S,X):-bb_def(Type,S,[X]).
pop(Type,S,X):-val(Type,S,[A|Xs]),set(Type,S,Xs),copy_term(A,X).
stack(Type,S,Xs):-val(Type,S,Xs).
push(S,X):-push('$stack',S,X).
pop(S,X):-pop('$stack',S,X).
stack(S,X):-stack('$stack',S,X).