Saya tidak mengklaim memahami ini sama sekali, tetapi jika ini membantu siapa pun ... maka hura.
Pertimbangkan definisi fix
. fix f = let x = f x in x
. Bagian yang membingungkan adalah yang x
didefinisikan sebagai f x
. Tapi pikirkan sebentar.
x = f x
Karena x = fx, maka kita bisa mengganti nilai x
di sisi kanannya, bukan? Jadi karena itu ...
x = f . f $ x
x = f . f . f $ x
x = f . f . f . f . f . f . f . f . f . f . f $ x
Jadi triknya adalah, untuk menghentikan, f
harus menghasilkan semacam struktur, sehingga nanti f
dapat mencocokkan pola struktur itu dan menghentikan rekursi, tanpa benar-benar peduli tentang "nilai" penuh dari parameternya (?)
Kecuali, tentu saja, Anda ingin melakukan sesuatu seperti membuat daftar tak terbatas, seperti yang diilustrasikan luqui.
Penjelasan faktorial TomMD bagus. Jenis tanda tangan Fix adalah (a -> a) -> a
. Dengan kata lain, tipe tanda tangan untuk (\recurse d -> if d > 0 then d * (recurse (d-1)) else 1)
adalah . Jadi kita bisa bilang begitu . Dengan begitu, fix mengambil fungsi kita, yaitu , atau sebenarnya, dan akan mengembalikan hasil tipe , dengan kata lain ,, dengan kata lain, fungsi lain!(b -> b) -> b -> b
(b -> b) -> (b -> b)
a = (b -> b)
a -> a
(b -> b) -> (b -> b)
a
b -> b
Tunggu, saya pikir itu seharusnya mengembalikan titik tetap ... bukan fungsi. Ya, semacam (karena fungsi adalah data). Anda dapat membayangkan bahwa ini memberi kita fungsi definitif untuk mencari faktorial. Kami memberinya fungsi yang tidak tahu cara mengulang (maka salah satu parameternya adalah fungsi yang digunakan untuk berulang), dan fix
mengajarkannya cara berulang.
Ingat bagaimana saya mengatakan itu f
harus menghasilkan semacam struktur sehingga nantinya f
pola dapat cocok dan dihentikan? Yah, itu tidak sepenuhnya benar, kurasa. TomMD mengilustrasikan bagaimana kita dapat memperluas x
untuk menerapkan fungsi dan langkah menuju kasus dasar. Untuk fungsinya, dia menggunakan if / then, dan itulah yang menyebabkan terminasi. Setelah penggantian berulang, in
bagian dari seluruh definisi fix
akhirnya berhenti didefinisikan dalam istilah x
dan saat itulah ia dapat dihitung dan lengkap.
fix error
ghci dan merasa nyaman dengan diri Anda sendiri."