5 Ocak 2009, PAZARTESİ
Nasıl Haskell kuyruk özyineleme çalışır?
Bu kod parçacığı yazdım ve len
kuyruk özyinelemeli olduğunu varsayıyorum, ama yine de bir yığın taşması oluşur. Yanlış olan ne?
myLength :: [a] -> Integer
myLength xs = len xs 0
where len [] l = l
len (x:xs) l = len xs (l 1)
main = print $ myLength [1..10000000]
CEVAP
5 Ocak 2009, PAZARTESİ
Haskell tembel olduğunu unutmayın. Hesaplaması (l 1) çok gerekli olmadığı kadar gerçekleşmeyecek.
'Kolay' düzeltme kullanmaktır$! '' değerlendirme gücü:
myLength :: [a] -> Integer
myLength xs = len xs 0
where len [] l = l
len (x:xs) l = len xs $! (l 1)
main = print $ myLength [1..10000000]
Bunu Paylaş:
Kuyruk özyineleme tam olarak nasıl çal...
Nasıl Haskell istisnalar çalışır?...
Nasıl Haskell, basit bir beşgen kullan...
Nasıl Haskell içinde doğan çalışır?...
Nasıl olursa gcc kuyruk özyineleme opt...