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
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.
Kullanmak Ne? ıenumerable vs Liste - N...
JavaScript kilitler nasıl çalışır?...
CSS üçgenler nasıl çalışır?...
Veri bağlama Nasıl çalışır?AngularJS :...
Nasıl veritabanı indeksleme çalışır?...