2014-10-21 59 views
5

Bir Integer türü olarak bir liste uzunluğunu dönmeye çalışıyor ama length xs döner bir Int türü olarak uzunluğu Başvurduğum yerine Int tipi Tamsayı olarak bir liste uzunluğunu döndürmek için nasıl. Bu konuda nasıl çalışabilirim?Haskell

Bu benim ulaşmak için çalışıyorum budur: (çalışmıyor)

sizeList :: [Integer] -> Integer 
sizeList xs = length xs 

Ben sizeList :: [Integer] -> Int dönüş değiştirmek ama bunu yapmak istemiyorum girmez çalışır.

+0

Sebastian söylediği gibi 'genericLength' ile gitmek - ya da excercise olarak uzunluğunu reimplement: D – Carsten

+2

bende sende de olsa bunun iyi bir fikir olup olmadığı konusunda umut? Genellikle, bu kadar uzun bir liste var bunu Int' 'in boyda sayamazsınız _possible_ değil - Neden olmak, bilgisayarın bellek temelde ints ile endeksli, bu nedenle yeterli belleğe sahip bir mimarlık genellikle ölçmek için yeterince büyük int'leri olacak herhangi bir liste. 64-bit platformunda, taşma kadar sayma [yaş alır] (http://www.wolframalpha.com/input/?i=2^64+%2F+3GHz) Neyse, sen sonsuz bir liste kullansanız bile. İşte bu yüzden standart 'length' fonksiyonu, IMO haklı olarak 'Int'' Integer' değil. – leftaroundabout

+0

Ve 32 bit bulurlar üzerinde yaklaşık 1,4 saniye sürer, ancak bu noktada (2^32 * 8 bayt ~ 34TR) kullanacaktır. – Zeta

cevap