[英]Haskell list length alternative
嗨,我在Haskell上有一個列表,其中包含接近10 ^ 15的整數,我正在嘗試打印列表的長度。
let list1 = [1..1000000000000000] -- this is just a dummy list I dont
print list1 length -- know the actual number of elements
打印此文件需要花費很長時間,是否還有另一種方法來獲取列表中的元素數量並打印該數量?
從偶爾列出的清單中我有時會得到一些價值。 可憐的人的版本是這樣的:
import Data.Monoid
type ListLength a = (Sum Integer, [a])
singletonLL :: a -> ListLength a
singletonLL x = (1, [x])
lengthLL :: ListLength a -> Integer
lengthLL (Sum len, _) = len
免費提供的Monoid
實例為您提供空列表,串聯和fromList
相似。 在列表map
運行的其他標准Prelude
函數(例如map
, take
, drop
並不是很難模仿,盡管您將需要跳過諸如cycle
並repeat
生成無限列表的那些函數,而filter
等則有點昂貴。 對於您的問題,您還需要類似Enum
方法的方法。 例如,也許像:
enumFromToLL :: Integral a => a -> a -> ListLength a
enumFromToLL lo hi = (fromIntegral hi-fromIntegral lo+1, [lo..hi])
然后,在ghci中,您的示例是即時的:
> lengthLL (enumFromToLL 1 1000000000000000)
1000000000000000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.