5

負のdoubleまたはfloatを表示しようとすると、セグメンテーション違反が発生するのはなぜですか?負の整数でも問題ありません。

Prelude> let a = 4
Prelude> :t a
a :: Integer
Prelude> let b = -4
Prelude> b
-4
Prelude> :t b
b :: Integer
Prelude> let c = 5.6
Prelude> :t c
c :: Double
Prelude> let d = -5.6
Prelude> :t d
d :: Double
Prelude> show d
"-Segmentation fault

いろいろ試してみましたが、数字は正しく理解されているようですが、表示されていません。バージョン情報:

ghci --version
The Glorious Glasgow Haskell Compilation System, version 6.10.4
4

4 に答える 4

6

MacPorts の GHC が壊れているようです。https://trac.macports.org/ticket/25265を参照

代わりに、Haskell.org から Haskell Platform をインストールすることを検討してください。これには、GHC 6.12.3 と Haskelly グッズのバンドルが含まれています。

于 2010-11-04T21:51:35.907 に答える
2

認識すべき最も重要なことは、Haskell ではセグメンテーション違反が発生してはならないということです。その型システムにより、実行時に「うまくいかない」ことはありません。セグメンテーション違反が見られる場合は、Haskell コンパイラにバグがあるか、Haskell FFI を使用して C コードに接続していて、C コードに問題が発生しています。ただし、純粋な Haskell コードでは、これが表示されることはありません。

于 2010-11-05T01:02:16.247 に答える
1

2011 年 3 月: これはHaskell Platformの GHC 7 リリースで修正され、 32 ビットと 64 ビットの両方の Mac ネイティブ ポートが良好な状態になっています。

于 2011-05-02T21:24:57.030 に答える
0

6.12.3で動作します。そのバージョンのバグである可能性があります。

于 2010-11-04T21:40:51.397 に答える