doc-src/IsarAdvanced/Codegen/Thy/examples/pick1.ML
changeset 25056 743f3603ba8b
parent 24421 acfb2413faa3
child 26318 967323f93c67
equal deleted inserted replaced
25055:3bb2ad8b1b37 25056:743f3603ba8b
    17 
    17 
    18 fun minus_nat (Suc m) (Suc n) = minus_nat m n
    18 fun minus_nat (Suc m) (Suc n) = minus_nat m n
    19   | minus_nat Zero_nat n = Zero_nat
    19   | minus_nat Zero_nat n = Zero_nat
    20   | minus_nat m Zero_nat = m;
    20   | minus_nat m Zero_nat = m;
    21 
    21 
    22 fun prod_case f1 (a, b) = f1 a b;
    22 end; (*struct Nat*)
    23 
    23 
    24 end; (*struct Nat*)
    24 structure Product_Type = 
       
    25 struct
       
    26 
       
    27 fun split c (a, b) = c a b;
       
    28 
       
    29 end; (*struct Product_Type*)
    25 
    30 
    26 structure Codegen = 
    31 structure Codegen = 
    27 struct
    32 struct
    28 
    33 
    29 fun pick ((k, v) :: xs) n =
    34 fun pick ((k, v) :: xs) n =
    30   (if Nat.less_nat n k then v else pick xs (Nat.minus_nat n k))
    35   (if Nat.less_nat n k then v else pick xs (Nat.minus_nat n k))
    31   | pick (x :: xs) n =
    36   | pick (x :: xs) n =
    32     let
    37     let
    33       val (k, v) = x;
    38       val a = x;
       
    39       val (k, v) = a;
    34     in
    40     in
    35       (if Nat.less_nat n k then v else pick xs (Nat.minus_nat n k))
    41       (if Nat.less_nat n k then v else pick xs (Nat.minus_nat n k))
    36     end;
    42     end;
    37 
    43 
    38 end; (*struct Codegen*)
    44 end; (*struct Codegen*)