Прийоми поводження з поїздами /
та ⌿
в поїздах
Під час користування поїздами ви можете скористатися скороченнями на f/
зразок суми +/
або навіть повторити скорочення //
. Однак якщо у вашого поїзда є більше деталей зліва від скорочення, вам знадобляться круглі дужки, щоб створити вершину. Ось кілька хитрощів для збереження байтів.
Використовуйте 1∊
замість монадних ∨/
або ∨⌿
булевих масивів
Завдання: Дано два рядки однакової довжини A і B, поверніть 2, якщо відповідні символи A і B рівні, 0 інакше. Наприклад , A←'abc'
і B←'def'
дає 0
і A←'abc'
та B←'dec'
дає 2
.
Рішення dfn може бути, A{2×∨/⍺=⍵}B
але ви хочете скоротити його, мовчазно. A(2×∨/=)B
не буде працювати, тому що правила формування поїздів розбирають це так, 2 (× ∨/ =)
але як ви хочете 2 × (∨/=)
.
Зауважте, що ∨/
або ∨⌿
за булевим вектором ( ∨/,
або ∨⌿,
для масивів вищого рангу) запитує, чи є 1 присутній, тобто 1∊
ми можемо записати наш поїзд як 2×1∊=
.
Зауважте, що ∊
ravels правильний аргумент, тому ви не можете використовувати його для зменшення кожного рядка або стовпця окремо.
Використовуйте 1⊥
замість монадних +/
або+⌿
Завдання: Давши список списків L та індекс N, поверніть тричі суму N-го списку. Наприклад L←(3 1 4)(2 7)
і N←1
дає 24
.
Рішення dfn може бути, N{3×+/⍺⊃⍵}L
але ви хочете скоротити його, мовчазно. N(3×+/⊃)L
не буде працювати, тому що правила формування поїздів розбирають це так, 3(× +/ ⊃)
але як ви хочете 3 × (+/⊃)
.
Зауважте, що оцінка списку чисел унарних (база-1) еквівалентна підсумовуванню списку, оскільки ∑ { a , b , c , d } = a + b + c + d = ( a × 1³) + ( b × 1² ) + ( c × 1¹) + ( d × 1⁰). Тому +/a b c d
те саме 1⊥a b c d
, що і ми можемо написати наш поїзд як 3×1⊥⊃
.
Зауважте, що аргументи вищого рангу 1⊥
еквівалентні +⌿
.
Використовуйте f.g
замість f/g
скалярних та / або векторних аргументів
Завдання: Давши список L і число N, поверніть діапазону 1 ретельну кількість мінімального залишку ділення, коли елементи L розділені на NEg L←31 41 59
і N←7
дають 1 2 3
.
Рішення dfn може бути, N{⍳⌊/⍺|⍵}L
але ви хочете скоротити його, мовчазно. N(⍳⌊/|)L
не буде працювати, тому що правила формування поїздів розбирають це так, ⍳ (⌊/) |
але як ви хочете ⍳ (⌊/|)
.
Внутрішній добуток A f.g B
скалярних двох функцій, коли аргументи є скалярами та / або векторами, такий же, як і f/ A g B
тому, що обидва є (A[1] g B[1]) f (A[2] g B[2]) f (A[3] g B[3])
і т. Д., Тому ми можемо записати свій потяг як ⍳⌊.|
.
Зауважте, що це не працює для масивів вищого рангу.
Використовуйте ∊⊆
замість /
булевих лівих та простих векторних правих аргументів
Завдання: Давши список L та число N, відфільтруйте список так, щоб залишилися лише числа, більші за N. Наприклад L←3 1 4
і N←1
дає 3 4
.
Рішення dfn може бути, N{(⍺<⍵)/⍵}L
але ви хочете скоротити його, мовчазно. N(</⊢)L
не працює, тому що правила прив'язки будуть розбирати це як, (</) ⊢
але ви хочете /
бути копією функції, а не оператором зменшити .
Діадик ⊆
з бульним лівим аргументом розділяє правий аргумент відповідно до пробігів 1s у лівому аргументі, відкидаючи елементи, зазначені 0s. Це майже те, що ми хочемо, окрім небажаного перегородки. Однак ми можемо позбутися від перегородки, застосувавши монадик ∊
. Таким чином ми {(⍺<⍵)/⍵}
можемо стати, {∊(⍺<⍵)⊆⍵}
і таким чином ми можемо написати наш поїзд як ∊<⊆⊢
.
Зауважте, що це не працює для масивів вищого рангу.
Використовуйте 0⊥
замість ⊢/
або ⊢⌿
з числовими аргументами
Завдання: З огляду на список L і число N, Помножити N з правим елементом Ноги L←3 1 4
і N←2
дає 8
.
Рішення dfn може бути, N{⍺×⊢/⍵}L
але ви хочете скоротити його, мовчазно. N(⊣×⊢/⊢)L
не буде працювати, тому що правила формування поїздів розбирають це так, ⊣ (× ⊢/ ⊢)
але як ви хочете ⊣ × (⊢/⊢)
.
Зверніть увагу, що 0⊥
на числовому масиві те саме ⊢⌿
, що і ми можемо записати наш поїзд як ⊣×0⊥⊢
.
Зауважте, що це вибирає останню основну комірку масивів вищого рангу.