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

  • Plugable

    Plugable

    19 Mayıs 2010
  • Shon Gonzales

    Shon Gonzale

    5 EKİM 2014
  • The Bad Tutorials

    The Bad Tuto

    6 EKİM 2009