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

  • Floortile83

    Floortile83

    16 Ocak 2010
  • Joshua Bane

    Joshua Bane

    24 Temmuz 2007
  • Professor Messer

    Professor Me

    27 NİSAN 2007