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 0et A←'abc'et B←'dec'donne 2.
Une solution dfn peut être A{2×∨/⍺=⍵}Bmais vous voulez la raccourcir en allant tacite. A(2×∨/=)Bne 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←1donne 24.
Une solution dfn peut être N{3×+/⍺⊃⍵}Lmais vous voulez la raccourcir en allant tacite. N(3×+/⊃)Lne 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 dc'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.gau lieu de f/gavec 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 59et N←7donne1 2 3 .
Une solution dfn peut être N{⍳⌊/⍺|⍵}Lmais vous voulez la raccourcir en allant tacite. N(⍳⌊/|)Lne va pas fonctionner parce que les règles de formation des trains analysent cela comme ⍳ (⌊/) |vous le souhaitez ⍳ (⌊/|).
Le produit interne A f.g Bde deux fonctions scalaires lorsque les arguments sont des scalaires et / ou des vecteurs est le même que f/ A g Bparce 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 4et N←1donne 3 4.
Une solution dfn peut être N{(⍺<⍵)/⍵}Lmais vous voulez la raccourcir en faisant tacite. N(</⊢)Lne 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 4et N←2donne 8.
Une solution dfn peut être N{⍺×⊢/⍵}Lmais vous voulez la raccourcir en allant tacite. N(⊣×⊢/⊢)Lne 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.