2015-12-10 5 views
6

誰もが依存関数型言語を入力した上自然数を表現するエレガントな方法を知っている:数値タワーを関数型言語でどのように形式化しますか?

data Nat = Zero | Succ Nat 

整数、小数、実数、複素数とクォータニオンは、あまりにも、実用的なプログラミングアプリケーションのために非常に重要です。

data Integer = Integer (sign : Bool) (modulus : Nat) 
data Fraction = Fraction (dividend : Nat) (divisor : Nat) 
data Real  = Real (exponent : Integer) (fraction : Nat) 
data Complex = Complex Real Real 
data Quaternion = Quaternion Real Real Real Real 

しかし、これらのタイプの実際の構造/性質はNatsのように意味がありません。整数は実際の整数と同形ではありません(たとえば、ゼロが2回発生するなど)。 Realsには100万個以上の細胞が必要です(3.141592)が、100個まで保存することはできません(4096)。コンプレックスは単にコンプレックスが何であるかを反映しないRealsのタプルです。 関数型プログラミング言語の数値タワーを表現する自然でエレガントな方法は何ですか?

+0

私は前に同様の質問をしてきましたが、私は誰も良い十分な解決策で来たんだと思います。 – MaiaVictor

+6

「複雑なものが何であるかを正確に反映していると思いませんか? (それはあなたの 'Real'だけ有理数の厳密なサブセットである、有限長い小数点値を含む、と述べた。)私が意味する、私はあなたがX^2 + 1のmod本当の多項式としてそれを表すことができたとし、それはに明確ではありませんあなたの反対は何ですか?数学的には話す –

+2

、私たちが選ぶもの以外のもののない「基本構造」が存在しない、と私たちは好きなら、私たちは二つの異なる構造が同等で表示し、同義的にそれらを使用することができます。整数の表現については、数学的ではありません。 –

答えて

0

私は、これは古い問題であり、私の答えはスカラ座ではなく、ハスケル/イドリスであるが、彼らがSpireでそれを行う方法を見るのは興味深い可能性があり実現しています。アプローチは、最初の代数的構造(すなわち、Semigroup/Group/Ring/Field /など)の階層構造を確立した後、数値的方法から様々なアルゴリズムを追加して、それらの上に数値型をインスタンス化することがあります。私はそこにいくつかの便利なアイデアを見つけることができたと確信しています。

関連する問題