src/Pure/General/stack.ML
changeset 21272 a87b27cdd142
parent 17756 d4a35f82fbb4
child 28129 8f647d24b49f
equal deleted inserted replaced
21271:4f791faf33f4 21272:a87b27cdd142
     9 sig
     9 sig
    10   type 'a T (*= 'a * 'a list*)
    10   type 'a T (*= 'a * 'a list*)
    11   val level: 'a T -> int
    11   val level: 'a T -> int
    12   val init: 'a -> 'a T
    12   val init: 'a -> 'a T
    13   val top: 'a T -> 'a
    13   val top: 'a T -> 'a
    14   val map: ('a -> 'a) -> 'a T -> 'a T
    14   val map_top: ('a -> 'a) -> 'a T -> 'a T
       
    15   val map_all: ('a -> 'a) -> 'a T -> 'a T
    15   val push: 'a T -> 'a T
    16   val push: 'a T -> 'a T
    16   val pop: 'a T -> 'a T      (*exception Empty*)
    17   val pop: 'a T -> 'a T      (*exception Empty*)
    17 end;
    18 end;
    18 
    19 
    19 structure Stack: STACK =
    20 structure Stack: STACK =
    25 
    26 
    26 fun init x = (x, []);
    27 fun init x = (x, []);
    27 
    28 
    28 fun top (x, _) = x;
    29 fun top (x, _) = x;
    29 
    30 
    30 fun map f (x, xs) = (f x, xs);
    31 fun map_top f (x, xs) = (f x, xs);
       
    32 
       
    33 fun map_all f (x, xs) = (f x, map f xs);
    31 
    34 
    32 fun push (x, xs) = (x, x :: xs);
    35 fun push (x, xs) = (x, x :: xs);
    33 
    36 
    34 fun pop (_, x :: xs) = (x, xs)
    37 fun pop (_, x :: xs) = (x, xs)
    35   | pop (_, []) = raise Empty;
    38   | pop (_, []) = raise Empty;