(* Basis * Copyright 1996, 1998 Peter Sestoft. Må kopieres og modificeres jvfr. GNU General Public License *) infix && datatype ordsek = Tom | Str of string | op && of ordsek * ordsek fun mksek 0 f = Tom | mksek n f = f () && mksek (n-1) f datatype genus = itk | fk datatype numerus = ent | flt datatype bestemthed = bes | ubs exception Umulig (* Dan afledte former: ""= umulig, "-s" = tilfoej suffix s *) fun tilfoej rod "" = raise Umulig | tilfoej rod suf = if String.sub(suf, 0) = #"-" then rod ^ String.extract(suf, 1, NONE) else suf (* Generel valgfunktion *) local val seed = ref 0.0 (* Uden betydning *) val randgen = ref (Random.newgen ()) fun normaliser rnd = real (round (rnd * 2147483647.0 + ~1073741824.0)) + 1073741824.0 fun initialiser s = (seed := s; randgen := Random.newgenseed s) val _ = initialiser (normaliser (Random.random (!randgen))) in fun strseed () = Real.fmt (StringCvt.FIX (SOME 0)) (!seed) fun skrivseed () = Str (strseed ()) fun saetseed s = initialiser s fun vaelgfra vec = Vector.sub(vec, Random.range (0, Vector.length vec) (!randgen)) fun vaelgikke forbudt vec = let val res = vaelgfra vec in if List.exists (fn x => x = res) forbudt then vaelgikke forbudt vec else res end fun terning n = Random.range (1, n+1) (!randgen) fun ssh r = Random.random (!randgen) < r end