Comment detail
正整数のゲーデル数化? (Nested Flatten)素数生成が間違っていたので修正。 ついでに多倍長整数を使って、Overflowしないようにしてみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | fun prime n =
let
val a = List.tabulate (n - 1, fn x => x + 2)
fun loop [] = []
| loop (x::xs) =
x :: loop (List.filter (fn i => i mod x <> 0) xs)
in
loop a
end
fun goedel (n : IntInf.int) =
let
open IntInf
val p = map fromInt (prime 100)
val a = map (valOf o Int.fromString o str) ((explode o toString) n)
in
toString (ListPair.foldl (fn (x, y, z) => pow (x, y) * z) 1 (p, a))
end
fun println s = print (s ^ "\n")
val _ = println (goedel 9)
val _ = println (goedel 81)
val _ = println (goedel 230)
val _ = println (goedel 19425463134)
|





omoikani
#4655()
[
StandardML
]
Rating-1/1=-1.00
fun prime n a 0 = a | prime n a i = if n mod 2 <> 0 andalso n mod 3 <> 0 then prime (n + 1) (a @ [n]) (i - 1) else prime (n + 1) a i fun goedel n = let val p = prime 5 [2, 3] 10 val a = map (valOf o Int.fromString o str) ((explode o Int.toString) n) in floor (ListPair.foldl (fn (x, y, z) => Math.pow (real x, real y) * z) 1.0 (p, a)) end val printInt = println o Int.toString; printInt (goedel 9); printInt (goedel 81); printInt (goedel 230)Rating-1/1=-1.00-0+
1 reply [ reply ]