Haskell 如何在列表中获取多个元素

Haskell 如何在列表中获取多个元素,haskell,list-comprehension,Haskell,List Comprehension,我想取五个连续的素数,它们是由素数生成的一个无限列表,并检查它们的总和是否构成另一个素数。我想要这样的东西: consecutivePrimes = [ a+b+c+d+e | a:b:c:d:e <- primes, prime a+b+c+d+e] 连续素数=[a+b+c+d+e | a:b:c:d:e由于列表理解可以被认为是一个映射与过滤器相结合(至少对于列表),因此每次只能在其中获得一个元素 但您仍然可以通过使用尾部将素数放入列表中,然后从每个列表中提取5个元素来完成此操作。在本

我想取五个连续的素数,它们是由
素数
生成的一个无限列表,并检查它们的总和是否构成另一个素数。我想要这样的东西:

consecutivePrimes = [ a+b+c+d+e | a:b:c:d:e <- primes, prime a+b+c+d+e]

连续素数=[a+b+c+d+e | a:b:c:d:e由于列表理解可以被认为是一个
映射
过滤器
相结合(至少对于列表),因此每次只能在其中获得一个元素

但您仍然可以通过使用
尾部
素数
放入列表中,然后从每个列表中提取5个元素来完成此操作。在本例中,您映射的单个元素(
ps
)就是一个列表

import Data.List (tails)
consecutivePrimes = [ a+b+c+d+e | ps <- tails primes, let [a,b,c,d,e] = take 5 ps, prime a+b+c+d+e]
导入数据列表(尾部)

连续素数=[a+b+c+d+e | ps这是我的解决方案,它很有效,但我发现它很难看:

consecutivePrimes = [x | x <- consecutivePrimes' primes, prime x]
consecutivePrimes' (a:b:c:d:e:xs) | prime (a+b+c+d+e) = (a+b+c+d+e) : consecutivePrimes' (b:c:d:e:xs)
                                  | otherwise = consecutivePrimes' (b:c:d:e:xs))

连续素数=[x | x我投票,很难。我不太喜欢在列表理解中使用
let
。你也可以做
a:b:c:d:e:@DavidFletcher这就是我要找的答案。请把它作为我问题的解决方案,这样我就可以接受了。我很想听到一些关于我的问题/答案的反馈,以及为什么会进行密切投票?