2

私は「Haskell - 関数型プログラミングの技術」に取り組んでおり、本当に奇妙な問題に遭遇しました:

次の 2 つの関数を定義しています。

averageThree :: Integer -> Integer -> Integer -> Float
averageThree a b c = (fromIntegral (a + b + c)) / 3

howManyAboveAverage :: Integer -> Integer -> Integer -> Integer

howManyAboveAverage a b c
    | (a == b) && (b == c) && (a == c) = 0
    | (fromIntegral a > (averageThree a b c) && (fromIntegral b > (averageThree a b c) || fromIntegral c > (averageThree a b c))) || (fromIntegral b > (averageThree a b c) && fromIntegral c > (averageThree a b c))  = 2
    | otherwise = 1

どちらも望ましい結果を生み出すようです。次に、次の quickCheck プロパティを定義します。

prop_averageThree1, prop_averageThree2, prop_averageThree3, prop_howManyAboveAverage :: Integer -> Integer -> Integer -> Bool

prop_averageThree1 a b c = (((averageThree a b c) * (fromIntegral 3)) == (fromIntegral (a + b + c)))
prop_averageThree2 a b c = (fromIntegral a >= averageThree a b c) || (fromIntegral b >= averageThree a b c) || (fromIntegral c >= averageThree a b c)
prop_averageThree3 a b c = (fromIntegral a <= averageThree a b c) || (fromIntegral b <= averageThree a b c) || (fromIntegral c <= averageThree a b c)
prop_howManyAboveAverage a b c = (0 <= howManyAboveAverage a b c) && (2 >= howManyAboveAverage a b c)

これらのプロパティはすべて、quickCheck prop_nameプロデュースで実行すると次のようになります。

Segmentation fault: 11

私のモジュール定義は次のとおりです。

module Chapter3 where
import Data.Char
import Test.QuickCheck

このエラー メッセージの原因は何ですか?

4

0 に答える 0