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

  • LatinNinja99

    LatinNinja99

    28 EKİM 2011
  • Michelle Phan

    Michelle Pha

    18 Temmuz 2006
  • Viktorija A.

    Viktorija A.

    28 Mart 2009