Прийоми поводження з поїздами /та ⌿в поїздах
Під час користування поїздами ви можете скористатися скороченнями на 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⊥⊢.
Зауважте, що це вибирає останню основну комірку масивів вищого рангу.