fun iterate :: "natural ==> ('b ==> 'a ==> 'b × 'a) ==> 'b ==> 'a ==> 'b × 'a"where "iterate k f x = (if k = 0 then Pair x else f x ∘→ iterate (k - 1) f)"
definition range :: "natural ==> seed ==> natural × seed"where "range k = iterate (log 2147483561 k) (λl. next ∘→ (λv. Pair (v + l * 2147483561))) 1 ∘→ (λv. Pair (v mod k))"
code_reflect Random_Engine
functions range select select_weight
ML ‹ structure Random_Engine = struct open Random_Engine; type seed = Code_Numeral.natural * Code_Numeral.natural; local val seed = Unsynchronized.ref (let val now = Time.toMilliseconds (Time.now ()); val (q, s1) = IntInf.divMod (now, 2147483562); val s2 = q mod 2147483398; in apply2 Code_Numeral.natural_of_integer (s1 + 1, s2 + 1) end); in fun next_seed () = let val (seed1, seed') = @{code split_seed} (! seed) val _ = seed := seed' in seed1 end fun run f = let val (x, seed') = f (! seed); val _ = seed := seed' in x end; end; end; ›
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.11Bemerkung:
(vorverarbeitet am 2026-04-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.