Penggunaan Γ
Penggunaan utama built-in Γ, yang dikenal sebagai pencocokan pola pada daftar atau dekonstruksi daftar , adalah untuk membagi daftar menjadi kepala dan ekor, dan menerapkan fungsi biner pada daftar tersebut. Ini sesuai dengan idiom pencocokan pola Haskell
f (x : xs) = <something>
f [] = <something else>
di mana <something>ekspresi berisi x, xsdan mungkin f. Ada 4 kelebihan Γ, masing-masing bekerja sedikit berbeda.
list
Overloading pertama list,, mengambil nilai adan fungsi biner f. Ini mengembalikan fungsi baru yang mengambil daftar, kembali ajika kosong, dan memanggil fkepala dan ekor jika itu kosong. Misalnya, Γ_1€ambil daftar, kembali -1jika kosong, dan indeks kemunculan pertama elemen pertama di ekor jika tidak.
listN
Overloading kedua, listNmirip dengan list, kecuali yang adihilangkan dan nilai default dari tipe pengembalian digunakan sebagai gantinya. Misalnya, Γ€setara dengan Γ0€, karena nilai numerik default adalah 0.
Dalam praktiknya, listNdigunakan lebih sering daripada list, karena nilai default tidak relevan atau persis apa yang Anda butuhkan. Pola umum adalah Γ~αβγ, di mana αβγada tiga fungsi; ini berlaku βuntuk elemen pertama dan γke ekor, dan menggabungkan hasilnya dengan α. Itu digunakan misalnya dalam jawaban ini . Pola lain termasuk hanya Γo:αmenerapkan αke elemen pertama, dan Γ·:mαuntuk menerapkan αke semua elemen kecuali yang pertama. Yang terakhir digunakan dalam jawaban ini .
listF
Overloading ketiga sedikit lebih terlibat. Seperti list, dibutuhkan nilai adan fungsi f, dan mengembalikan fungsi baru gyang mengambil daftar. Namun, kali ini fmengambil argumen fungsi tambahan, yang merupakan gdirinya sendiri, dan dapat menyebutnya pada nilai apa pun (termasuk, namun tidak terbatas pada, ujung daftar input). Ini berarti listFmenerapkan skema rekursi umum pada daftar.
listFtidak sering digunakan, karena rekursi eksplisit dengan list/ listNbiasanya memiliki panjang yang sama atau lebih pendek, seperti pada jawaban ini .
listNF
listNFadalah untuk listFapa listNadalah list: input adihilangkan, dan nilai default dari tipe pengembalian digunakan sebagai gantinya. Dalam keadaan yang jarang terjadi, bisa lebih pendek dari lipatan kanan, misalnya dalam jawaban ini .
Sebagai contoh versi rekursif Γ, fungsi Γλ·:o⁰↔mengocok daftar dalam urutan pertama, terakhir, kedua, kedua-ke-terakhir, ketiga, ketiga-ke-terakhir, dan seterusnya.
Cobalah online!
Fungsinya fadalah lambda eksplisit λ·:o⁰↔, yang argumennya ⁰adalah seluruh fungsi. Yang fdilakukan adalah membalikkan ekor ↔, lalu memanggil fungsi utama secara rekursif o⁰, dan akhirnya menempelkan kepala kembali ·:. Tentu saja, Γ·:o₀↔satu byte lebih pendek, tetapi tidak berfungsi jika garis berisi sesuatu selain fungsi ini.