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

  • 2ndfloor91

    2ndfloor91

    17 Kasım 2007
  • HowcastTechGadgets

    HowcastTechG

    22 EYLÜL 2010
  • KarnasCamillo

    KarnasCamill

    24 EKİM 2007