Trik untuk berurusan dengan /
dan ⌿
di kereta
Saat menggunakan kereta, Anda mungkin ingin menggunakan pengurangan f/
seperti jumlah +/
atau bahkan mereplikasi pengurangan //
. Namun, jika kereta Anda memiliki lebih banyak bagian di sebelah kiri reduksi, Anda memerlukan tanda kurung untuk membuat puncak. Berikut adalah beberapa trik untuk menghemat byte.
Gunakan 1∊
sebagai ganti monadik ∨/
atau ∨⌿
pada array Boolean
Tugas: Diberikan dua string sama panjang A dan B, kembalikan 2 jika ada karakter yang sesuai dari A dan B sama, 0 sebaliknya Misalnya A←'abc'
dan B←'def'
memberikan 0
dan A←'abc'
dan B←'dec'
memberi 2
.
Solusi dfn mungkin A{2×∨/⍺=⍵}B
tetapi Anda ingin mempersingkat dengan pergi diam-diam. A(2×∨/=)B
tidak akan bekerja karena aturan pembentukan kereta mengurai ini 2 (× ∨/ =)
tetapi Anda inginkan 2 × (∨/=)
.
Perhatikan itu ∨/
atau ∨⌿
pada vektor Boolean ( ∨/,
atau ∨⌿,
untuk array peringkat yang lebih tinggi) menanyakan apakah ada 1 hadiah, yaitu 1∊
, sehingga kita dapat menulis kereta kita sebagai 2×1∊=
.
Perhatikan bahwa ∊
mengecilkan argumen yang benar, sehingga Anda tidak dapat menggunakannya untuk mengurangi setiap baris atau kolom secara terpisah.
Gunakan 1⊥
sebagai ganti monadik +/
atau+⌿
Tugas: Diberikan daftar daftar L dan indeks N, kembalikan tiga kali lipat dari jumlah daftar N. Misalnya L←(3 1 4)(2 7)
dan N←1
memberi 24
.
Solusi dfn mungkin N{3×+/⍺⊃⍵}L
tetapi Anda ingin mempersingkat dengan pergi diam-diam. N(3×+/⊃)L
tidak akan bekerja karena aturan pembentukan kereta mengurai ini 3(× +/ ⊃)
tetapi Anda inginkan 3 × (+/⊃)
.
Perhatikan bahwa mengevaluasi daftar angka di unary (basis-1) sama dengan menjumlahkan daftar karena  { a , b , c , d } = a + b + c + d = ( a × 1³) + ( b × 1² ) + ( c × 1¹) + ( d × 1⁰). Oleh karena +/a b c d
itu sama dengan 1⊥a b c d
, dan kita dapat menulis kereta kita sebagai 3×1⊥⊃
.
Perhatikan bahwa pada argumen peringkat yang lebih tinggi, 1⊥
setara dengan +⌿
.
Gunakan f.g
alih-alih f/g
dengan skalar dan / atau argumen vektor
Tugas: Diberikan daftar L dan angka N, kembalikan kisaran 1 dengan teliti jumlah sisa pembagian minimum saat elemen L dibagi dengan NEg L←31 41 59
dan N←7
beri 1 2 3
.
Solusi dfn mungkin N{⍳⌊/⍺|⍵}L
tetapi Anda ingin mempersingkat dengan pergi diam-diam. N(⍳⌊/|)L
tidak akan bekerja karena aturan pembentukan kereta menguraikan ini sebagai⍳ (⌊/) |
tetapi Anda inginkan ⍳ (⌊/|)
.
Produk dalam A f.g B
skalar dua berfungsi ketika argumennya skalar dan / atau vektor sama dengan f/ A g B
karena keduanya(A[1] g B[1]) f (A[2] g B[2]) f (A[3] g B[3])
dll, sehingga kita dapat menulis kereta kita sebagai ⍳⌊.|
.
Perhatikan bahwa ini tidak berfungsi untuk array peringkat lebih tinggi.
Menggunakan ∊⊆
alih-alih /
dengan argumen kanan kanan Boolean dan vektor kanan
Tugas: Diberikan daftar L dan angka N, filter daftar sehingga hanya angka yang lebih besar dari N yang tersisa. Misalnya L←3 1 4
danN←1
memberi 3 4
.
Solusi dfn mungkin N{(⍺<⍵)/⍵}L
tetapi Anda ingin mempersingkat dengan pergi diam-diam. N(</⊢)L
tidak akan berfungsi karena aturan yang mengikat akan menguraikan ini (</) ⊢
tetapi Anda ingin /
menjadi fungsi mereplikasi daripada mengurangi operator .
Diadik ⊆
dengan argumen kiri Boolean mempartisi argumen yang benar sesuai dengan run 1s di argumen kiri, menjatuhkan elemen yang ditunjukkan oleh 0s. Ini hampir apa yang kita inginkan, simpan untuk partisi yang tidak diinginkan. Namun, kita dapat menyingkirkan partisi dengan menerapkan monadik ∊
. Dengan demikian {(⍺<⍵)/⍵}
dapat menjadi {∊(⍺<⍵)⊆⍵}
dan dengan demikian kita dapat menulis kereta kita sebagai ∊<⊆⊢
.
Perhatikan bahwa ini tidak berfungsi untuk array peringkat lebih tinggi.
Gunakan 0⊥
sebagai ganti ⊢/
atau ⊢⌿
dengan argumen numerik
Tugas: Diberikan daftar L dan angka N, kalikan N dengan elemen paling kanan dari LEg L←3 1 4
dan N←2
beri 8
.
Solusi dfn mungkin N{⍺×⊢/⍵}L
tetapi Anda ingin mempersingkat dengan pergi diam-diam. N(⊣×⊢/⊢)L
tidak akan bekerja karena aturan pembentukan kereta mengurai ini ⊣ (× ⊢/ ⊢)
tetapi Anda inginkan ⊣ × (⊢/⊢)
.
Perhatikan bahwa 0⊥
pada array numerik sama dengan ⊢⌿
, jadi kita bisa menulis kereta kita sebagai ⊣×0⊥⊢
.
Perhatikan bahwa ini memilih sel utama terakhir dari array peringkat yang lebih tinggi.