Astuces pour gérer /
et⌿
dans les trains
Lorsque vous utilisez des trains, vous voudrez peut-être utiliser des réductions f/
telles que la somme +/
ou même la réplication de réduction//
. Cependant, si votre train a plus de pièces à gauche de la réduction, vous avez besoin de parenthèses pour créer un sommet. Voici quelques astuces pour économiser des octets.
Utilisez 1∊
au lieu de monadique ∨/
ou∨⌿
sur des tableaux booléens
Tâche: étant donné deux chaînes de longueur égale A et B, retournez 2 si tous les caractères correspondants de A et B sont égaux, 0 sinon. Par exemple A←'abc'
et B←'def'
donne 0
et A←'abc'
et B←'dec'
donne 2
.
Une solution dfn peut être A{2×∨/⍺=⍵}B
mais vous voulez la raccourcir en allant tacite. A(2×∨/=)B
ne va pas fonctionner parce que les règles de formation des trains analysent cela comme 2 (× ∨/ =)
vous le souhaitez 2 × (∨/=)
.
Observez cela ∨/
ou ∨⌿
sur un vecteur booléen ( ∨/,
ou ∨⌿,
pour des tableaux de rang supérieur) demande s'il y a un 1 présent, c'est 1∊
-à- dire , afin que nous puissions écrire notre train comme 2×1∊=
.
Notez que ∊
défile son argument de droite, vous ne pouvez donc pas l'utiliser pour réduire chaque ligne ou colonne séparément.
Utilisez 1⊥
au lieu de monadique +/
ou+⌿
Tâche: étant donné une liste de listes L et un index N, retournez trois fois la somme de la Nième liste. Par exemple L←(3 1 4)(2 7)
et N←1
donne 24
.
Une solution dfn peut être N{3×+/⍺⊃⍵}L
mais vous voulez la raccourcir en allant tacite. N(3×+/⊃)L
ne va pas fonctionner parce que les règles de formation des trains analysent cela comme 3(× +/ ⊃)
vous le souhaitez 3 × (+/⊃)
.
Observez que l'évaluation d'une liste de nombres en unaire (base-1) équivaut à sommer la liste car ∑ { a , b , c , d } = a + b + c + d = ( a × 1³) + ( b × 1² ) + ( c × 1¹) + ( d × 1⁰). Par conséquent, +/a b c d
c'est la même chose que 1⊥a b c d
, et nous pouvons écrire notre train comme 3×1⊥⊃
.
Notez que sur les arguments de rang supérieur, 1⊥
est équivalent à +⌿
.
Utiliser f.g
au lieu de f/g
avec des arguments scalaires et / ou vectoriels
Tâche: étant donné une liste L et un nombre N, renvoyez la plage 1 jusqu'au nombre de divisions minimales restant lorsque les éléments de L sont divisés par NEg L←31 41 59
et N←7
donne1 2 3
.
Une solution dfn peut être N{⍳⌊/⍺|⍵}L
mais vous voulez la raccourcir en allant tacite. N(⍳⌊/|)L
ne va pas fonctionner parce que les règles de formation des trains analysent cela comme ⍳ (⌊/) |
vous le souhaitez ⍳ (⌊/|)
.
Le produit interne A f.g B
de deux fonctions scalaires lorsque les arguments sont des scalaires et / ou des vecteurs est le même que f/ A g B
parce que les deux sont (A[1] g B[1]) f (A[2] g B[2]) f (A[3] g B[3])
etc., donc nous pouvons écrire notre train comme ⍳⌊.|
.
Notez que cela ne fonctionne pas pour les tableaux de rang supérieur.
Utiliser ∊⊆
au lieu de /
avec des arguments booléens gauche et simple vecteur droite
Tâche: étant donné une liste L et un nombre N, filtrez la liste afin qu'il ne reste que des nombres supérieurs à N. Par exemple L←3 1 4
et N←1
donne 3 4
.
Une solution dfn peut être N{(⍺<⍵)/⍵}L
mais vous voulez la raccourcir en faisant tacite. N(</⊢)L
ne fonctionnera pas car les règles de liaison analyseront cela comme (</) ⊢
mais vous voulez /
être la fonction répliquée plutôt que l'opérateur réduire .
Dyadique ⊆
avec un argument gauche booléen partitionne l'argument droit selon des séries de 1 dans l'argument gauche, supprimant les éléments indiqués par 0. C'est presque ce que nous voulons, sauf pour le partitionnement indésirable. Cependant, nous pouvons nous débarrasser du partitionnement en appliquant monadic ∊
. Ainsi {(⍺<⍵)/⍵}
peut devenir {∊(⍺<⍵)⊆⍵}
et ainsi nous pouvons écrire notre train comme ∊<⊆⊢
.
Notez que cela ne fonctionne pas pour les tableaux de rang supérieur.
Utiliser à la 0⊥
place ⊢/
ou ⊢⌿
avec des arguments numériques
Tâche: étant donné une liste L et un nombre N, multipliez le N par l'élément le plus à droite de LEg L←3 1 4
et N←2
donne 8
.
Une solution dfn peut être N{⍺×⊢/⍵}L
mais vous voulez la raccourcir en allant tacite. N(⊣×⊢/⊢)L
ne va pas fonctionner parce que les règles de formation des trains analysent cela comme ⊣ (× ⊢/ ⊢)
vous le souhaitez ⊣ × (⊢/⊢)
.
Observez que 0⊥
sur un tableau numérique est le même que ⊢⌿
, afin que nous puissions écrire notre train comme ⊣×0⊥⊢
.
Notez que cela sélectionne la dernière cellule principale des tableaux de rang supérieur.