home *** CD-ROM | disk | FTP | other *** search
- /* 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).
-
-