Haskell 将列表传递给另一个函数

Haskell 将列表传递给另一个函数,haskell,Haskell,我有一个生成从2到n的素数的代码 您不会将某些内容传递给函数,例如某些列表。这是命令式思维。在Haskell中,你要做的是,用一个列表作为它的参数来计算某个函数。通常,您只需保留素数,并将结果用作someText的参数。比如† 或者只是在REPL中 GHCi> someText $ primes 100 "List starts with2" 当然,您也可以重新定义素数以包括某些文本。但是很明显,结果将是一个字符串,而不再是一个列表 primes' :: Integer -> S

我有一个生成从2到n的素数的代码

您不会将某些内容传递给函数,例如某些列表。这是命令式思维。在Haskell中,你要做的是,用一个列表作为它的参数来计算某个函数。通常,您只需保留
素数
,并将结果用作
someText
的参数。比如†

或者只是在REPL中

GHCi> someText $ primes 100
"List starts  with2"
当然,您也可以重新定义
素数
以包括
某些文本
。但是很明显,结果将是一个字符串,而不再是一个列表

primes' :: Integer -> String
primes' n = someText $ sieve [2..n]
 where sieve (p:xs) = p : sieve [x|x <- xs, x `mod` p > 0]

†实际上这不起作用:您的函数
someText
不完整。模式
x:[]
只匹配一个只有一个元素的列表(这更容易编写
someText[x]=…
)。您希望匹配以一个元素开头的任何列表;使用模式
x:
执行此操作

main :: IO ()
main = print (someText $ primes 100)
GHCi> someText $ primes 100
"List starts  with2"
primes' :: Integer -> String
primes' n = someText $ sieve [2..n]
 where sieve (p:xs) = p : sieve [x|x <- xs, x `mod` p > 0]
primes' :: Integer -> String
primes' = someText . primes