gpt4 book ai didi

haskell - Haskell 中使用 IO Bool 进行列表理解

转载 作者:行者123 更新时间:2023-12-02 10:41:06 27 4
gpt4 key购买 nike

我正在尝试通过使用 Miller Rabin 素性检查检查梅森数来找到可能的梅森素数。

如果 mersennes 是梅森数的无限列表,我想做类似的事情:

probableMersennePrimes :: IO [Integer]
probableMersennePrimes = [ n | n <- mersennes, primeMillerRabin n ]

其中 primeMillerRabin::Integer -> IO Bool

作为一个附带问题,类型应该是 IO [Integer] 还是 [IO Integer]

最佳答案

您可以使用管道中的ListT流式传输无限的数字列表:

import Control.Monad
import Data.Monoid
import Pipes

mersennes :: [Integer]
mersennes = undefined

primeMillerRabin :: Integer -> IO Bool
primeMillerRabin = undefined

probableMersennePrimes :: ListT IO Integer
probableMersennePrimes = do
n <- Select (each mersennes)
continue <- lift (primeMillerRabin n)
guard continue
return n

main = runListT $ do
n <- probableMersennePrimes
lift (print n)
mempty

即使 mersennes 列表是无限的,它也可以工作,并且它会在您计算结果时流式传输结果。

关于haskell - Haskell 中使用 IO Bool 进行列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26307073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com