SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FamilyFeud

    FamilyFeud

    22 AĞUSTOS 2006
  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008
  • Rickymon Tero

    Rickymon Ter

    1 Ocak 2007