# HG changeset patch # User wenzelm # Date 1680347099 -7200 # Node ID 65008644d394bda03855f55b69bd51d456fcd9da # Parent c6c4069a86f3e901d95e529d344b952de039e76c tuned: prefer "build" combinator; diff -r c6c4069a86f3 -r 65008644d394 src/Pure/General/integer.ML --- a/src/Pure/General/integer.ML Thu Mar 30 16:10:50 2023 +0200 +++ b/src/Pure/General/integer.ML Sat Apr 01 13:04:59 2023 +0200 @@ -6,6 +6,7 @@ signature INTEGER = sig + val build: (int -> int) -> int val min: int -> int -> int val max: int -> int -> int val add: int -> int -> int @@ -29,6 +30,8 @@ structure Integer : INTEGER = struct +fun build (f: int -> int) = f 0; + fun min x y = Int.min (x, y); fun max x y = Int.max (x, y); @@ -65,7 +68,7 @@ fun shift i = swap (div_mod i base); in funpow_yield len shift k |> fst end; -fun eval_radix base ks = - fold_rev (fn k => fn i => k + i * base) ks 0; +fun eval_radix base = + build o fold_rev (fn k => fn i => k + i * base); end; diff -r c6c4069a86f3 -r 65008644d394 src/Pure/General/set.ML --- a/src/Pure/General/set.ML Thu Mar 30 16:10:50 2023 +0200 +++ b/src/Pure/General/set.ML Sat Apr 01 13:04:59 2023 +0200 @@ -82,16 +82,14 @@ (* size *) local - fun add_size Empty n = n - | add_size (Leaf1 _) n = n + 1 - | add_size (Leaf2 _) n = n + 2 - | add_size (Leaf3 _) n = n + 3 - | add_size (Branch2 (left, _, right)) n = - n + 1 |> add_size left |> add_size right - | add_size (Branch3 (left, _, mid, _, right)) n = - n + 2 |> add_size left |> add_size mid |> add_size right; + fun count Empty n = n + | count (Leaf1 _) n = n + 1 + | count (Leaf2 _) n = n + 2 + | count (Leaf3 _) n = n + 3 + | count (Branch2 (left, _, right)) n = count right (count left (n + 1)) + | count (Branch3 (left, _, mid, _, right)) n = count right (count mid (count left (n + 2))); in - fun size set = add_size set 0; + val size = Integer.build o count; end; @@ -131,7 +129,7 @@ fold_rev left (f e1 (fold_rev mid (f e2 (fold_rev right x)))); in fold_rev end; -fun dest tab = fold_rev_set cons tab []; +val dest = Library.build o fold_rev_set cons; (* exists and forall *) diff -r c6c4069a86f3 -r 65008644d394 src/Pure/General/table.ML --- a/src/Pure/General/table.ML Thu Mar 30 16:10:50 2023 +0200 +++ b/src/Pure/General/table.ML Sat Apr 01 13:04:59 2023 +0200 @@ -164,8 +164,8 @@ fold_rev left (f e1 (fold_rev mid (f e2 (fold_rev right x)))); in fold_rev end; -fun dest tab = fold_rev_table cons tab []; -fun keys tab = fold_rev_table (cons o #1) tab []; +fun dest tab = Library.build (fold_rev_table cons tab); +fun keys tab = Library.build (fold_rev_table (cons o #1) tab); (* min/max entries *) diff -r c6c4069a86f3 -r 65008644d394 src/Pure/PIDE/yxml.ML --- a/src/Pure/PIDE/yxml.ML Thu Mar 30 16:10:50 2023 +0200 +++ b/src/Pure/PIDE/yxml.ML Sat Apr 01 13:04:59 2023 +0200 @@ -81,8 +81,8 @@ | tree (XML.Text s) = string s; in tree end; -fun tree_size tree = traverse (Integer.add o size) tree 0; -fun body_size body = fold (Integer.add o tree_size) body 0; +val tree_size = Integer.build o traverse (Integer.add o size); +val body_size = Integer.build o fold (Integer.add o tree_size); (* output *) diff -r c6c4069a86f3 -r 65008644d394 src/Pure/ROOT.ML --- a/src/Pure/ROOT.ML Thu Mar 30 16:10:50 2023 +0200 +++ b/src/Pure/ROOT.ML Sat Apr 01 13:04:59 2023 +0200 @@ -38,6 +38,7 @@ ML_file "library.ML"; ML_file "General/print_mode.ML"; +ML_file "General/integer.ML"; ML_file "General/alist.ML"; ML_file "General/table.ML"; ML_file "General/set.ML"; @@ -64,7 +65,6 @@ subsection "Library of general tools"; -ML_file "General/integer.ML"; ML_file "General/stack.ML"; ML_file "General/queue.ML"; ML_file "General/heap.ML"; diff -r c6c4069a86f3 -r 65008644d394 src/Pure/Thy/latex.ML --- a/src/Pure/Thy/latex.ML Thu Mar 30 16:10:50 2023 +0200 +++ b/src/Pure/Thy/latex.ML Sat Apr 01 13:04:59 2023 +0200 @@ -168,8 +168,8 @@ in -fun length_symbols syms = - fold Integer.add (these (read scan_latex_length syms)) 0; +val length_symbols = + Integer.build o fold Integer.add o these o read scan_latex_length; fun output_symbols syms = if member (op =) syms Symbol.latex then