[math][knuth] Surreal Number

上のプログラムで ZeroOrMore と書いていて思い出したのが surreal number (日本語だと超現実数?でもこの言い方オカルト臭くて好きじゃない…)。

クヌース先生の書いた「至福の超現実数」というこれまた怪しい本があるのでおすすめ (血気盛んな若い男女の話です)。

至福の超現実数―純粋数学に魅せられた男と女の物語

至福の超現実数―純粋数学に魅せられた男と女の物語

追記: haXe で surreal number ごっこ。

enum SurrealNumber {
    _;
    cons(f: SurrealNumber, s: SurrealNumber);
}

class Surreal {
    public static function backToReal(s: SurrealNumber): Float {
        return switch (s) {
            case _: 1;
            case cons(f, s):
                (backToReal(s) - backToReal(f)) / 2;
        }
    }

    public static function toOrdered(s: SurrealNumber): Int {
        var a: Float = backToReal(s);
        return a == 0 ?
            0: (a < 0 ? -1: 1) * -cast(Math.log(Math.abs(a)) / Math.log(2));
    }

    public static function main() {
        trace(toOrdered(cons(_, _)));
        trace(toOrdered(cons(cons(_, _), _)));
        trace(toOrdered(cons(cons(cons(_, _), _), _)));
    }
}