-- Stack in RIGAL #STACK2 -- stacks are modelled by lists. -- The only problem is removing elements from the end. -- "Base" RIGAL does not support this operation and you -- have either to store "current length" of the stack in a separate -- numeric variable, ( see "stack.rig") or -- make copy of the list (it is very expensive). -- However ther is a wayaround in the internals of Rigal -- descriptors: $ST:=(. 2 3 .); $ST1:=#POP($ST); -- changes $ST to (.2.) and returns it PRINT (.$ST $ST1.); -- There is, however, problem with "empty" stack, represented by NULL. -- The #POP operation cannot assign NULL to argument, so then NULL -- is only returned. $ST2:=#POP($ST1); -- leaves $ST1 as (.2.) and returns NULL PRINT (.$ST1 $ST2.); ## #POP $ST / IF #LIST($ST) AND (#LEN($ST)>1)-> #CALL_PAS(91 $ST); RETURN $ST; ELSIF T-> RETURN NULL FI; / ##