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

  • SegaAmerica

    SegaAmerica

    5 Mart 2008
  • WoodysGamertag

    WoodysGamert

    17 Aralık 2009
  • xCraash

    xCraash

    6 Temmuz 2012