home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / b / binprolog / !BinPro330 / library / stacks < prev   
Text File  |  1994-08-27  |  1KB  |  52 lines

  1. /* new stack package, working fine with bb_gc */
  2.  
  3. bb_def_stack(Stack):-bb_def(Stack,'$top',0).
  4.  
  5. bb_push(Stack,Ob):-
  6.     val(Stack,'$top',I),!,
  7.     I1 is I+1,
  8.     bb_def(Stack,I1,Ob),
  9.     bb_set(Stack,'$top',I1).
  10. bb_push(Stack,_):-
  11.     errmes('undefined stack',Stack).
  12.  
  13. bb_pop(Stack,Ob):-
  14.     bb_val(Stack,'$top',I),
  15.     bb_val(Stack,I,Ob),
  16.     I>0,I1 is I-1,!,
  17.     bb_rm(Stack,I),
  18.     bb_set(Stack,'$top',I1).
  19. bb_pop(Stack,_):-
  20.     errmes('stack underflow',stack(Stack)).
  21.  
  22. bb_stack(Stack,List):-
  23.     val(Stack,'$top',Top),
  24.     findall(X,bb_stack_member(Stack,Top,X),List).
  25.  
  26. bb_stack_member(Stack,Max,Elem):-
  27.     for(I,1,Max),
  28.     val(Stack,I,Elem).
  29.  
  30. bb_stack_rm(Stack):-
  31.     val(Stack,'$top',Top),bb_rm(Stack,'$top'),
  32.     for(I,1,Top),
  33.     bb_rm(Stack,I),
  34.     fail.
  35. bb_stack_rm(_).
  36.  
  37. /* old stacks: for compatibility only */
  38.  
  39. push(Type,S,X):-val(Type,S,Xs),!,bb_set(Type,S,[X|Xs]).
  40. push(Type,S,X):-bb_def(Type,S,[X]).
  41.  
  42. pop(Type,S,X):-val(Type,S,[A|Xs]),set(Type,S,Xs),copy_term(A,X).
  43.  
  44. stack(Type,S,Xs):-val(Type,S,Xs).
  45.  
  46. push(S,X):-push('$stack',S,X).
  47.  
  48. pop(S,X):-pop('$stack',S,X).
  49.  
  50. stack(S,X):-stack('$stack',S,X).
  51.  
  52.