Truques para lidar com /e ⌿em trens
Ao usar trens, convém usar reduções f/como soma +/ou mesmo replicar a redução //. No entanto, se o seu trem tiver mais peças à esquerda da redução, você precisará de parênteses para criar um topo. Aqui estão alguns truques para salvar bytes.
Use em 1∊vez de matrizes monádicas ∨/ou ∨⌿booleanas
Tarefa: Dadas duas seqüências de tamanho igual A e B, retorne 2 se qualquer caractere correspondente de A e B for igual, 0 caso contrário. Por exemplo, A←'abc'e B←'def'dá 0e A←'abc'e B←'dec'dá 2.
Uma solução dfn pode ser, A{2×∨/⍺=⍵}Bmas você deseja reduzi-la, tornando-a tácita. A(2×∨/=)Bnão vai funcionar porque as regras de formação de trens analisam isso como 2 (× ∨/ =)você deseja 2 × (∨/=).
Observe que ∨/ou ∨⌿em um vetor booleano ( ∨/,ou ∨⌿,para matrizes de classificação mais alta) pergunta se existe algum 1 presente, ou seja 1∊, para que possamos escrever nosso trem como 2×1∊=.
Observe que ∊o argumento correto é desviado, portanto você não pode usá-lo para reduzir cada linha ou coluna separadamente.
Use em 1⊥vez de monádico +/ou+⌿
Tarefa: Dada uma lista de listas L e um índice N, retorne três vezes a soma da enésima lista. Por exemplo, L←(3 1 4)(2 7)e N←1dá 24.
Uma solução dfn pode ser, N{3×+/⍺⊃⍵}Lmas você deseja reduzi-la, tornando-a tácita. N(3×+/⊃)Lnão vai funcionar porque as regras de formação de trens analisam isso como 3(× +/ ⊃)você deseja 3 × (+/⊃).
Observe que avaliar uma lista de números em unário (base 1) é equivalente a somar a lista porque a { a , b , c , d } = a + b + c + d = ( a × 1³) + ( b × 1²) ) + ( c × 1¹) + ( d × 1⁰). Portanto, +/a b c dé o mesmo que 1⊥a b c d, e podemos escrever nosso trem como 3×1⊥⊃.
Observe que, nos argumentos de classificação mais alta, 1⊥é equivalente a +⌿.
Use em f.gvez de f/gargumentos escalares e / ou vetoriais
Tarefa: Dada uma lista L e um número N, retornar o intervalo 1 completa o número de resto mínimos divisão quando os elementos de L são divididos por ELg L←31 41 59e N←7dá 1 2 3.
Uma solução dfn pode ser, N{⍳⌊/⍺|⍵}Lmas você deseja reduzi-la, tornando-a tácita. N(⍳⌊/|)Lnão vai funcionar porque as regras de formação de trens analisam isso como ⍳ (⌊/) |você deseja ⍳ (⌊/|).
O produto interno A f.g Bdas duas funções escalares quando os argumentos são escalares e / ou vetores é o mesmo que f/ A g Bambos são (A[1] g B[1]) f (A[2] g B[2]) f (A[3] g B[3])etc., para que possamos escrever nosso trem como ⍳⌊.|.
Observe que isso não funciona para matrizes de classificação mais alta.
Use em ∊⊆vez de /argumentos à esquerda booleanos e à direita de vetor simples
Tarefa: Dada uma lista L e um número N, filtre a lista para que apenas números maiores que N permaneçam. Por exemplo, L←3 1 4e N←1dá 3 4.
Uma solução dfn pode ser, N{(⍺<⍵)/⍵}Lmas você deseja reduzi-la, tornando-a tácita. N(</⊢)Lnão funcionará porque as regras de ligação analisarão isso como (</) ⊢mas você deseja /que a função seja replicada em vez de reduzir o operador .
Diádico ⊆com um argumento à esquerda booleano particiona o argumento à direita de acordo com execuções de 1s no argumento à esquerda, eliminando elementos indicados por 0s. Isso é quase o que queremos, exceto pelo particionamento indesejado. No entanto, podemos nos livrar da partição aplicando monádica ∊. Assim {(⍺<⍵)/⍵}pode se tornar {∊(⍺<⍵)⊆⍵}e assim podemos escrever nosso trem como ∊<⊆⊢.
Observe que isso não funciona para matrizes de classificação mais alta.
Use em 0⊥vez de ⊢/ou ⊢⌿com argumentos numéricos
Tarefa: Dada uma lista L e um número N, multiplique N pelo elemento mais à direita de LEg L←3 1 4e N←2dê 8.
Uma solução dfn pode ser, N{⍺×⊢/⍵}Lmas você deseja reduzi-la, tornando-a tácita. N(⊣×⊢/⊢)Lnão vai funcionar porque as regras de formação de trens analisam isso como ⊣ (× ⊢/ ⊢)você deseja ⊣ × (⊢/⊢).
Observe que 0⊥em uma matriz numérica é o mesmo que ⊢⌿, para que possamos escrever nosso trem como ⊣×0⊥⊢.
Observe que isso seleciona a última célula principal de matrizes de classificação mais alta.