Peta untuk Daftar Bersarang
Katakanlah Anda punya daftar bersarang, seperti sebuah matriks:
[[0 1 2][3 4 5][6 7 8]]
Atau serangkaian string:
["foo""bar"]
Dan Anda ingin memetakan blok ke tingkat bersarang (yaitu menerapkannya ke setiap nomor atau setiap karakter). Solusi naif adalah bersarang %:
{{...}%}%
Namun, Anda dapat benar-benar mendorong blok bagian dalam ke tumpukan dan kemudian menggunakannya f%. fadalah "map dengan parameter tambahan", sehingga akan memetakan %ke daftar luar, menggunakan blok sebagai parameter kedua:
{...}f%
Menghemat dua byte.
Trik lain yang rapi untuk melakukan sesuatu for (i=0; i<5; ++i) for (j=0; j<5; ++j) {...}adalah
5,_f{f{...}}
Bagian luar fakan memetakan ke rentang pertama, memasok rentang kedua sebagai parameter tambahan. Tapi sekarang, jika Anda menggunakan flagi, hanya elemen stack atas adalah array, jadi Anda fmemetakan blok bagian dalam itu, memasok "variabel iterasi" luar sebagai parameter tambahan. Ini berarti blok dalam berjalan dengan idan jpada tumpukan.
Ini memiliki jumlah karakter yang sama dengan hanya memetakan blok ke produk Cartesian (meskipun yang terakhir semakin pendek jika Anda membutuhkan pasangan sebagai array):
5,_m*{~...}%
Perbedaannya adalah bahwa versi ini menghasilkan satu array hasil untuk semua pasangan, sedangkan double- fmenghasilkan daftar bersarang, yang dapat berguna jika Anda ingin menyimpan hasil dalam kotak, dengan variabel iterator menjadi koordinat.
Terima kasih kepada Dennis karena menunjukkan trik ini kepada saya.
0.6.4 Pembaruan
fdan :sekarang telah sangat ditingkatkan dengan mengambil operator lain termasuk mereka sendiri. Ini berarti Anda dapat menyimpan lebih banyak byte sekarang. Memetakan operator ke daftar bersarang menjadi lebih pendek sekarang:
{:x}%
{x}f%
::x
Ini tidak terlalu membantu dengan memetakan blok ke daftar bersarang.
Adapun blok atau operator yang menerapkan produk Cartesian, ini juga menjadi lebih pendek sekarang, untuk blok serta operator:
5,_f{f{...}}
5,_ff{...}
5,_f{fx}
5,_ffx
Apa yang baik adalah bahwa Anda sekarang dapat bersarang ini. Jadi, Anda dapat menerapkan operator dengan mudah ke tingkat bawah daftar:
:::x
Atau satu blok dengan beberapa tipu daya:
{...}ff%