doc-src/IsarAdvanced/Codegen/Thy/examples/collect_duplicates.ML
author wenzelm
Sat, 10 Nov 2007 14:31:20 +0100
changeset 25370 8b1aa4357320
parent 25182 64e3f45dc6f4
child 26513 6f306c8c2c54
permissions -rw-r--r--
updated;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23250
9886802cbbd6 updated documentation
haftmann
parents: 23107
diff changeset
     1
structure HOL = 
21147
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
     2
struct
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
     3
24421
acfb2413faa3 updated
haftmann
parents: 23850
diff changeset
     4
type 'a eq = {eqop : 'a -> 'a -> bool};
acfb2413faa3 updated
haftmann
parents: 23850
diff changeset
     5
fun eqop (A_:'a eq) = #eqop A_;
21147
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
     6
23250
9886802cbbd6 updated documentation
haftmann
parents: 23107
diff changeset
     7
end; (*struct HOL*)
21147
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
     8
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
     9
structure List = 
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
    10
struct
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
    11
25370
8b1aa4357320 updated;
wenzelm
parents: 25182
diff changeset
    12
fun member A_ x (y :: ys) =
8b1aa4357320 updated;
wenzelm
parents: 25182
diff changeset
    13
  (if HOL.eqop A_ y x then true else member A_ x ys)
23850
f1434532a562 updated
haftmann
parents: 23250
diff changeset
    14
  | member A_ x [] = false;
21147
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
    15
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
    16
end; (*struct List*)
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
    17
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
    18
structure Codegen = 
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
    19
struct
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
    20
25182
64e3f45dc6f4 updated;
wenzelm
parents: 24421
diff changeset
    21
fun collect_duplicates A_ xs ys (z :: zs) =
64e3f45dc6f4 updated;
wenzelm
parents: 24421
diff changeset
    22
  (if List.member A_ z xs
64e3f45dc6f4 updated;
wenzelm
parents: 24421
diff changeset
    23
    then (if List.member A_ z ys then collect_duplicates A_ xs ys zs
64e3f45dc6f4 updated;
wenzelm
parents: 24421
diff changeset
    24
           else collect_duplicates A_ xs (z :: ys) zs)
64e3f45dc6f4 updated;
wenzelm
parents: 24421
diff changeset
    25
    else collect_duplicates A_ (z :: xs) (z :: ys) zs)
64e3f45dc6f4 updated;
wenzelm
parents: 24421
diff changeset
    26
  | collect_duplicates A_ xs ys [] = xs;
21147
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
    27
737a94f047e3 continued tutorial
haftmann
parents:
diff changeset
    28
end; (*struct Codegen*)