Sztuczki do radzenia sobie z pociągami /i ⌿w pociągach
Przy korzystaniu z pociągów może chcesz użyć redukcji f/takich jak sumy +/, a nawet zmniejszenie replikacji //. Jeśli jednak twój pociąg ma więcej części po lewej stronie redukcji, potrzebujesz nawiasów, aby utworzyć szczyt. Oto kilka sztuczek, aby zaoszczędzić bajty.
Użyj 1∊zamiast tablic monadycznych ∨/lub ∨⌿na tablicach boolowskich
Zadanie: Biorąc pod uwagę dwa ciągi A i B o równej długości, zwróć 2, jeśli dowolne odpowiadające znaki A i B są równe, w przeciwnym razie 0. Np A←'abc'i B←'def'daje 0a A←'abc'i B←'dec'daje 2.
Rozwiązanie dfn może być, A{2×∨/⍺=⍵}Bale chcesz je skrócić, przechodząc milczenie. A(2×∨/=)Bnie zadziała, ponieważ zasady formowania pociągów parsują to tak, jak 2 (× ∨/ =)chcesz 2 × (∨/=).
Zauważ, że ∨/lub ∨⌿na wektorze boolowskim ( ∨/,lub w ∨⌿,przypadku tablic wyższej rangi) pyta, czy jest jakikolwiek 1, tzn. Czy 1∊możemy napisać nasz pociąg jako 2×1∊=.
Zwróć uwagę, że ∊zachowuje właściwy argument, więc nie można go użyć do zmniejszenia każdego wiersza lub kolumny osobno.
Użyj 1⊥zamiast monadycznego +/lub+⌿
Zadanie: Biorąc pod uwagę listę list L i indeks N, zwróć trzykrotnie sumę N-tej listy. Np. L←(3 1 4)(2 7)I N←1daje 24.
Rozwiązanie dfn może być, N{3×+/⍺⊃⍵}Lale chcesz je skrócić, przechodząc milczenie. N(3×+/⊃)Lnie zadziała, ponieważ zasady formowania pociągów parsują to tak, jak 3(× +/ ⊃)chcesz 3 × (+/⊃).
Zauważ, że ocena listy liczb w jednostkowej (podstawa-1) jest równoważna zsumowaniem listy, ponieważ ∑ { a , b , c , d } = a + b + c + d = ( a × 1³) + ( b × 1² ) + ( c × 1¹) + ( d × 1⁰). Dlatego +/a b c djest taki sam jak 1⊥a b c di możemy napisać nasz pociąg jako 3×1⊥⊃.
Zauważ, że w argumentach wyższej rangi 1⊥jest to równoważne z +⌿.
Użyj f.gzamiast f/gz argumentami skalarnymi i / lub wektorowymi
Zadanie: Biorąc pod uwagę listę L i liczbę N, zwróć zakres 1 dokładnie liczbę resztek minimalnego podziału, gdy elementy L zostaną podzielone przez NEg L←31 41 59i N←7daje 1 2 3.
Rozwiązanie dfn może być, N{⍳⌊/⍺|⍵}Lale chcesz je skrócić, przechodząc milczenie. N(⍳⌊/|)Lnie zadziała, ponieważ zasady formowania pociągów parsują to tak, jak ⍳ (⌊/) |chcesz ⍳ (⌊/|).
Wewnętrzny iloczyn A f.g Bdwóch funkcji skalarnych, gdy argumentami są skalary i / lub wektory, jest taki sam, f/ A g Bponieważ oba są (A[1] g B[1]) f (A[2] g B[2]) f (A[3] g B[3])itp., Więc możemy napisać nasz ciąg jako ⍳⌊.|.
Zauważ, że to nie działa w przypadku tablic wyższego rzędu.
Użyj ∊⊆zamiast /z logicznymi argumentami lewej i prostej wektorowej prawej
Zadanie: biorąc pod uwagę listę L i liczbę N, przefiltruj listę, aby pozostały tylko liczby większe niż N. Np. L←3 1 4I N←1daje 3 4.
Rozwiązanie dfn może być, N{(⍺<⍵)/⍵}Lale chcesz je skrócić, przechodząc milczenie. N(</⊢)Lnie zadziała, ponieważ reguły wiązania to przeanalizują, ponieważ (</) ⊢chcesz /być replikacją funkcji, a nie operatorem zmniejszania .
Dyadic ⊆z logicznym lewym argumentem dzieli prawy argument zgodnie z przebiegiem 1s w lewym argumencie, usuwając elementy wskazane przez 0s. To jest prawie to, czego chcemy, z wyjątkiem niechcianego partycjonowania. Możemy jednak pozbyć się partycjonowania, stosując monadic ∊. W ten sposób {(⍺<⍵)/⍵}możemy się stać {∊(⍺<⍵)⊆⍵}i w ten sposób możemy napisać nasz pociąg jako ∊<⊆⊢.
Zauważ, że to nie działa w przypadku tablic wyższego rzędu.
Użyj 0⊥zamiast ⊢/lub ⊢⌿z argumentami numerycznymi
Zadanie: Biorąc pod uwagę listę L i liczbę N, pomnóż N przez najbardziej prawy element LEg L←3 1 4i N←2daje 8.
Rozwiązanie dfn może być, N{⍺×⊢/⍵}Lale chcesz je skrócić, przechodząc milczenie. N(⊣×⊢/⊢)Lnie zadziała, ponieważ zasady formowania pociągów parsują to tak, jak ⊣ (× ⊢/ ⊢)chcesz ⊣ × (⊢/⊢).
Zauważ, że 0⊥na tablicy liczbowej jest to samo ⊢⌿, więc możemy napisać nasz pociąg jako ⊣×0⊥⊢.
Zauważ, że wybiera to ostatnią główną komórkę tablic wyższego rzędu.