Bunu hiç anladığımı iddia etmiyorum, ama eğer bu birine yardım ederse ... o zaman yippee.
Tanımını düşünün fix. fix f = let x = f x in x. Akıllara durgunluk veren kısım, şu xşekilde tanımlanmaktadır f x. Ama bir dakika düşünün.
x = f x
X = fx xolduğuna göre, bunun sağ tarafındaki değerini değiştirebiliriz , değil mi? Yani bu nedenle...
x = f . f $ x
x = f . f . f $ x
x = f . f . f . f . f . f . f . f . f . f . f $ x
Öyleyse işin püf noktası, sona erdirmek için, fbir tür yapı oluşturmak zorundadır, böylece daha sonra fbu yapıyı eşleştirebilir ve parametresinin (?) Tam "değerini" umursamadan yinelemeyi sonlandırabilir
Tabii ki luqui'nin gösterdiği gibi sonsuz bir liste oluşturmak gibi bir şey yapmak istemiyorsan.
TomMD'nin faktöriyel açıklaması iyidir. Düzeltmenin tür imzası (a -> a) -> a. Tip imzası (\recurse d -> if d > 0 then d * (recurse (d-1)) else 1)olan (b -> b) -> b -> b, başka bir deyişle, (b -> b) -> (b -> b). Yani bunu söyleyebiliriz a = (b -> b). Bu şekilde, bir düzeltmedir bizim fonksiyonunu alır a -> a, ya da gerçekten (b -> b) -> (b -> b)ve türünde bir sonuç dönecek a, başka bir deyişle, b -> bbaşka bir deyişle, başka bir işlev!
Bekle, sabit bir noktaya dönmesi gerektiğini sanıyordum ... bir fonksiyon değil. Evet, öyle (çünkü fonksiyonlar veri). Bize bir faktöriyel bulma konusunda kesin bir işlev verdiğini hayal edebilirsiniz. Ona nasıl tekrarlanacağını bilmeyen bir fonksiyon verdik (bu nedenle parametrelerinden biri tekrarlamak için kullanılan bir fonksiyondur) ve fixona nasıl tekrarlanacağını öğrettik.
Bunun bir ftür yapı oluşturması gerektiğini söylediğimi hatırlıyor fmusunuz, böylece daha sonra örüntü eşleşip sonlanabilir mi? Bu tam olarak doğru değil sanırım. TomMD x, işlevi uygulamak ve temel duruma doğru adım atmak için nasıl genişleyebileceğimizi gösterdi. İşlevi için, eğer / o zaman kullandı ve feshin nedeni budur. Tekrarlanan değiştirmelerden sonra in, tüm tanımın bir kısmı fixsonunda terimleriyle tanımlanmayı durdurur xve bu, hesaplanabilir ve tamamlandığında gerçekleşir.
fix errorghci yazabilir ve kendiniz hakkında iyi hissedebilirsiniz."