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 xdidefinisikan sebagai f x. Tapi pikirkan sebentar.
x = f x
Karena x = fx, maka kita bisa mengganti nilai xdi 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, fharus menghasilkan semacam struktur, sehingga nanti fdapat 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)ab -> 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 fixmengajarkannya cara berulang.
Ingat bagaimana saya mengatakan itu f harus menghasilkan semacam struktur sehingga nantinya fpola dapat cocok dan dihentikan? Yah, itu tidak sepenuhnya benar, kurasa. TomMD mengilustrasikan bagaimana kita dapat memperluas xuntuk menerapkan fungsi dan langkah menuju kasus dasar. Untuk fungsinya, dia menggunakan if / then, dan itulah yang menyebabkan terminasi. Setelah penggantian berulang, inbagian dari seluruh definisi fixakhirnya berhenti didefinisikan dalam istilah xdan saat itulah ia dapat dihitung dan lengkap.
fix errorghci dan merasa nyaman dengan diri Anda sendiri."