gpt4 book ai didi

寻找素数的 Haskell 列表理解

转载 作者:行者123 更新时间:2023-12-01 15:42:27 25 4
gpt4 key购买 nike

我正在尝试使用列表推导式尽可能简洁地找到小于某个整数 n 的所有素数。我正在学习 Haskell,这只是一个练习。我想写这样的东西:

isqrt :: Integral a => a -> a   
isqrt = floor . sqrt . fromIntegral

primes :: Integral a => a -> [a]
primes n = [i | i <- [1,3..n], mod i k /= 0 | k <- primes (isqrt i)]

这当然行不通。有没有办法在列表推导中包含列表推导?

这是我遇到的错误:

exercise-99-1.hs:138:39: Not in scope: `k'

exercise-99-1.hs:138:46:
Illegal parallel list comprehension: use -XParallelListComp

exercise-99-1.hs:138:68: Not in scope: `i'

但是 - 我真的没想到语法是合法的:-)

目的是尽可能直接翻译:"primes n = 奇数集 i 小于 n这样 i 不能被任何 k 整除,对于集合中的所有 k:primes (isqrt i) " - 或多或少。 (我希望我没听错?)

谢谢!

最佳答案

我在以下方面取得了一些进展:

primes :: Integral a => a -> [a]  
primes 2 = [2]
primes n = 2:[i | i <- [3,5..n], all (\k -> if (mod i k /= 0) then True else False)
(primes (isqrt i))]

是否有更短的方式来编写 lambda 谓词?

编辑:是的,有,感谢评论中的评论!

primes :: Integral a => a -> [a]  
primes 2 = [2]
primes n = 2:[i | i <- [3,5..n], all ((/= 0) . mod i) (primes (isqrt i))]

关于寻找素数的 Haskell 列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085347/

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