RosettaCodeData/Task/Stack/Oz/stack.oz
2023-07-01 13:44:08 -04:00

31 lines
484 B
Text

functor
export
New
Push
Pop
Empty
define
fun {New}
{NewCell nil}
end
proc {Push Stack Element}
NewStack
%% Use atomic swap for thread safety
OldStack = Stack := NewStack
in
NewStack = Element|OldStack
end
proc {Pop Stack ?Result}
NewStack
%% Use atomic swap for thread safety
OldStack = Stack := NewStack
in
Result|NewStack = OldStack
end
fun {Empty Stack}
@Stack == nil
end
end