Tulis kombinator titik tetap dalam karakter sesedikit mungkin, dalam bahasa pilihan Anda.
- bentuk bebas ( mis. , apa pun yang terpendek): seluruh program, fungsi aktual, cuplikan kode
- Anda tidak boleh menggunakan perpustakaan standar Anda jika ada
- Namun Anda dapat mengekstraknya dari fungsi tingkat tinggi lainnya, Anda lebih suka melakukannya daripada membangunnya dari basis
Harap sertakan faktorial rekursif atau Fibonacci yang menggunakannya sebagai demo.
Dalam pertanyaan ini, referensi-diri dapat diterima, tujuannya hanya untuk menghapusnya dari fungsi rekursif yang akan diterapkan.
(define Y(lambda(f)(f(Y f))))
?)Jawaban:
Haskell: 10 karakter
Contoh penggunaan untuk membuat definisi rekursif dari faktorial atau n-Fibonacci:
Meskipun demikian, cara yang lebih umum untuk digunakan
y
adalah dengan menghasilkan urutan ini secara langsung, daripada sebagai fungsi:Tentu saja, dengan Haskell, ini seperti menembak ikan dalam tong! The
Data.Function
perpustakaan memiliki fungsi ini, disebutfix
, meskipun dilaksanakan agak lebih rinci.sumber
Perl, 37
Demonstrasi faktorial:
Peragaan fibonacci:
sumber
GNU C - 89 karakter
Contoh:
sumber
k2, 12 char
Implementasi self-referensial yang jelas adalah yang terpendek. Ini adalah tanda desain bahasa yang baik. Sayangnya, K tidak malas, jadi kami hanya bisa mengatur nilai berdasarkan panggilan.
Definisi ini juga harus bekerja di k4 dan q tanpa masalah, meskipun saya menganggap k2 untuk contoh di bawah ini.
18 karakter yang lebih sederhana memungkinkan kita secara tepat menuliskan
(λx. x x) (λxyz. y (x x y) z)
dalam K.Mungkin suatu hari nanti (k7?), Ini bisa terlihat seperti
Y:{x Y x}
.sumber
Python 3, 30 Bytes
Demo:
Kredit: https://gist.github.com/WoLpH/17552c9508753044e44f
sumber