创建列表的更快方法

joe*_*l76 0 haskell list

我必须n用值创建一个长度列表,v所以我写

let lst = [v | _ <- [1..n]]
Run Code Online (Sandbox Code Playgroud)

有没有一个更快的方法,因为它n可能很大?

Wil*_*sem 6

您可以使用replicate :: Int -> a -> [a]它,可能会更快一些:

let lst = replicate n v
Run Code Online (Sandbox Code Playgroud)

但无论大小n,您在这里都不会构造列表。Haskell很懒,所以这意味着您只需存储一个“表达式”即可构建一个列表。如果您仅对第二个元素感兴趣,那么它将不会构造列表的其余部分。

请注意,由于列表融合 [ghc-doc],编译器有时可以重写表达式,以使列表从不构造并立即被使用。