0

Haskell を学習しようとしていますが、再帰の問題で立ち往生しています。私がする必要があるのは、数値が素数かどうかを調べることです。これはこれまでの私の試みです。しかし、それは機能しません。素数以外の場合は「False」になりますが、素数の場合は無限ループに陥ります。

isPrime :: Int -> Bool
isPrime num = primeTest num 2
    where
      primeTest :: Int -> Int -> Bool
      primeTest num x
            | x == num      = True
            | num `mod` x == 0 = False
            | otherwise    = primeTest num (x + 1)
               where 
                 x = 2
4

2 に答える 2

3

あなたは必要ありません

where 
  x = 2

これが、無限ループに陥っている理由です。たとえば、入力 2 を考えると、num mod x0 が返されるため、False が返されます。入力 5 を考慮すると、 num mod x1 が返されます (xこの場合は 1 であるため)。primeTest num (x + 1)そのため、割り当てで呼び出されるそれ以外の部分に移動しx = 2ます。したがって、常にこのループはx値 3 で無限に実行されます。

于 2013-10-06T01:10:55.090 に答える
1

at the end は、「スロット」で渡された値に関係なく、afterのwhere x=2すべてのインスタンスを2 にします。を取り除きます。xprimeTest num xprimeTestxwhere x=2

于 2013-10-06T01:11:11.547 に答える