2017-08-27 9 views
7

私はNaturalのデータタイプがbaseであることを発見しました。私は負でない整数型を使うつもりであると思われます。しかし、なぜ私がNaturalからIntegerまでを好むべきかはっきりしていません。どちらの型も任意の精度を持ち、どちらも非常に最適化されたランタイム表現 - Integer representationNatural representationを持っています。しかしNaturalcan throw pure exceptions自然数を減算すると、実際にはコードに型の安全性が増しません。一方、Integerはすべてのパッケージで人気があります。ハスケルで 'Natural'を 'Integer'で選択するのはいつですか?

だからいつ、なぜNaturalを使うべきですか?

+1

これはちょっと意見が分かれるかもしれませんが、私の判断基準は「実行時エラーを否定的な結果にするには 'Natural'を選択してください」 – chi

+0

@chi同意してください。 'Num'型クラスの中に' negate'と '( - )'を持っていますが、減算を許さないようにすることはできません。 – Shersh

答えて

4

NaturalまたはIntegerを使用する理由がわかりません。代わりにRationalを使用してみませんか?任意の精度で最適化されたランタイム表現を持ち、自然言語、整数、およびの公式で動作します。

私のポイントは、意味的に意味をなさせるタイプを選択することです。ナチュラルでストリートの家を数え、次のゴルフゲームを整数で記録し、新鮮なブルーベリーパイを合肥と分けることができます。

+0

私はこの部分が(もしあれば)どのような部分が乱暴に意味されているのかわかりません。あなたの意見がはっきりと書かれているほうがいいと思います。 – leftaroundabout

+0

@leftaroundについて別の修辞的なスタイルで2番目の答えを追加することをお勧めします。 – erisco

+0

@eriscoセマンティックなセンスのために 'Natural'を選択する理由は良い理由です。しかしそれではなぜnewtype Natural = Natural Integer? 'Rational'は、' gcd'関数を絶えず呼び出しているため、 'Integer'や' Natural'よりはるかに遅いです。しかし、コンパイラの最適化とインライン化のために、どれが「Natural」か「Integer」のどちらが遅いのかは明らかではありません。私の質問はちょうどではありません«おー、私は2つのタイプ、emm ...私は何を使用する必要がありますか?私はとてもばかげて、私は選択できません»。しかし、なぜそのような意味を持つそのような「Natural」型を作成しますか?なぜ彩度ではなく例外ですか?私はどんな利益を得ることができますか? – Shersh

関連する問題