SORU
24 Ocak 2011, PAZARTESİ


Nasıl düzeltmeyi kullanmak, ve nasıl çalışır?

Biraz fix belgelerine şimdi yapması gereken ne anladım ne kafam karışmıştı, kaynak kodunu inceledim. Bu bana daha karışık sol:

fix :: (a -> a) -> a
fix f = let x = f x in x

Tam olarak nasıl bu sabit bir noktaya karşılık veriyor mu?

Bu komut satırında dışarı denemeye karar verdi:

Prelude Data.Function> fix id
...

Ve o orada asılı. Şimdi adil olmak gerekirse, bu biraz yavaş benim eski macbook. Ancak, bu işlevi olamazçokhiçbir kimlik geçti, aynı şey geri vererek, hesaplama açısından pahalı (CPU zamanı kemiriyor bahsetmiyorum). Neyi yanlış yapıyorum?

CEVAP
24 Ocak 2011, PAZARTESİ


Yanlış bir şey yapıyorsun. fix id sonsuz bir döngü.

fix bir fonksiyonun en az bir sabit noktası verir derken domain theory anlamda. fix (\x -> 2*x-1)değil1 Bu fonksiyon sabit bir nokta olsa da, çünkü 1, geri döneceksin, değilazetki alanında bir sipariş.

Etki alanı veya iki sadece bir paragrafta sipariş anlatamam, alan teorisi için yukarıdaki bağlantıya bakın. Mükemmel bir öğretici, okuması kolay ve oldukça aydınlatıcı. Kesinlikle tavsiye ederim.

10.000 feet manzarası, fix fikri kodlar, üst düzey bir işlevözyineleme. Eğer ifade varsa:

let x = 1:x in x

Sonsuz listesinde [1,1..] aynısı fix kullanarak söyleyebiliriz: hangi sonuçları

fix (\x -> 1:x)

(Ya da sadece fix (1:) beni (1:) fonksiyonun sabit bir nokta bulun diyor,, x yukarıda tanımlandığı gibi x = 1:x... gibi bir değer DÜŞÜK. Bu fikir başka bir şey değildir, fix tanımından gördüğünüz gibi -- özyineleme işlev içine saklanmış.

Herhangi bir özyinelemeli işlevi bu şekilde son derece nadir değil gibi. (uzun yazabilirsiniz ... özyineleme gerçekten genel bir kavramdır ^em>polimorfik özyineleme... ve o zaman bile encodable* *24) kullanarak değil emin değilim. Örneğin tipik bir fibonacci fonksiyonu:

fib n = if n < 2 then n else fib (n-1)   fib (n-2)

Yazılı fix kullanılarak yapılabilir bu şekilde

fib = fix (\f -> \n -> if n < 2 then n else f (n-1)   f (n-2))

Egzersiz: fix tanımı fib bu iki tanım eşdeğer olduğunu göstermek için genişletin.

Ama tam bir anlayış için, etki alanı teorisi hakkında bilgi edinin. Gerçekten harika şeyler.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • New Scientist

    New Scientis

    27 Kasım 2006
  • Tomas N

    Tomas N

    14 Kasım 2010
  • xXGAMERrs_Xx

    xXGAMERrs_Xx

    31 Temmuz 2014