Haskell,“Is Prime”函数

Tar*_*our 1 null primes haskell filter dollar-sign

我是 Haskell 的新手,我无法理解“Null $ 过滤器”的事情。

isPrime n
  | n < 2 = error "Zu kleine Zahl fuer Primzahltest"
  | otherwise = null $ filter (\k -> n `mod` k == 0) [2.. n-1]
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 5

运算($) :: (a -> b) -> a -> b符将左操作数应用到右操作数。因为它的优先级较低,所以它被用作“分组”表达式的一种方式。因此该表达式等价于:

-- null $ filter (\k -> n `mod` k == 0) [2.. n-1]
   null ( filter (\k -> n `mod` k == 0) [2.. n-1] )
Run Code Online (Sandbox Code Playgroud)

null :: Foldable f => f a -> Bool是一个检查 a 是否Foldable没有元素的函数。True因此对于列表来说,如果列表为空则返回,False否则返回。

该列表包含和k之间的整数,按升序排列,其中是,因此是 的除数。通过使用,我们检查该数字是否没有除数,如果是这样,我们返回;否则我们就返回。2n-1n `mod` k0nnullnTrueFalse