Trenlerle /
ve ⌿
trenlerle uğraşmak için püf noktaları
Ne zaman trenler kullanarak size indirim kullanmak isteyebilirsiniz f/
toplamı gibi +/
ve hatta çoğaltmak azaltılması //
. Bununla birlikte, treninizin azaltma işleminin solunda daha fazla bölümü varsa, üstüne oluşturmak için parantez gerekir. İşte bayt kurtarmak için bazı püf noktaları.
1∊
Monadik ∨/
veya ∨⌿
Boolean dizileri yerine kullanın
Görev: İki eşit uzunluktaki A ve B dizeleri göz önüne alındığında, A ve B'nin karşılık gelen karakterlerinin her ikisi de eşitse, 2 döndürün. Örneğin A←'abc'
ve B←'def'
verir 0
ve A←'abc'
ve B←'dec'
verir 2
.
Bir dfn çözümü olabilir, A{2×∨/⍺=⍵}B
ancak zımni yaparak kısaltmak istiyorsunuz. A(2×∨/=)B
işe yaramayacak çünkü tren oluşum kuralları 2 (× ∨/ =)
bunu istediğiniz gibi ayrıştırıyor 2 × (∨/=)
.
Bunu ∨/
veya ∨⌿
bir Boolean vektöründe ( ∨/,
veya ∨⌿,
daha yüksek dereceli diziler için) var olup olmadığını sorar, yani 1∊
treni şu şekilde yazabiliriz 2×1∊=
.
∊
Bunun doğru argümanını ortaya çıkardığına dikkat edin, böylece her bir satırı veya sütunu ayrı ayrı azaltmak için kullanamazsınız.
Kullanım 1⊥
yerine monadic ait +/
veya+⌿
Görev: L listelerinin ve N dizininin bir listesi göz önüne alındığında, Nci listenin toplamını üç kere döndürün. Örn L←(3 1 4)(2 7)
ve N←1
verir 24
.
Bir dfn çözümü olabilir, N{3×+/⍺⊃⍵}L
ancak zımni yaparak kısaltmak istiyorsunuz. N(3×+/⊃)L
işe yaramayacak çünkü tren oluşum kuralları 3(× +/ ⊃)
bunu istediğiniz gibi ayrıştırıyor 3 × (+/⊃)
.
Unary (sayı-1) 'deki bir sayı listesinin değerlendirilmesinin listenin toplanmasına eşdeğer olduğunu gözlemleyin, çünkü because { a , b , c , d } = a + b + c + d = ( a × 1³) + ( b × 1² ) + ( c × 1¹) + ( d × 1⁰). Bu nedenle +/a b c d
, aynı 1⊥a b c d
ve treni de aynı şekilde yazabiliriz 3×1⊥⊃
.
Yüksek rütbeli argümanlarda, 1⊥
bunun eşdeğeri olduğuna dikkat edin +⌿
.
Skaler ve / veya vektör argümanları f.g
yerine kullanınf/g
Görev: L ve N sayısının bir listesi verildiğinde, L'nin elemanları NEg'ye bölündüğünde L←31 41 59
ve N←7
verdiğinde , 1. aralığı, minimum bölme kalanı sayısının sonuna kadar döndürün 1 2 3
.
Bir dfn çözümü olabilir, N{⍳⌊/⍺|⍵}L
ancak zımni yaparak kısaltmak istiyorsunuz. N(⍳⌊/|)L
işe yaramayacak çünkü tren oluşum kuralları ⍳ (⌊/) |
bunu istediğiniz gibi ayrıştırıyor ⍳ (⌊/|)
.
A f.g B
Skaler iki iç çarpımı , argümanlar skaler ve / veya vektörler olduğu zaman aynıdır, f/ A g B
ikisi de (A[1] g B[1]) f (A[2] g B[2]) f (A[3] g B[3])
vb. İle aynıdır , bu yüzden treni şu şekilde yazabiliriz ⍳⌊.|
.
Bunun yüksek dereceli diziler için çalışmadığını unutmayın.
Boolean left ve simple vector right argümanları ∊⊆
yerine kullanın/
Görev: Bir L listesi ve bir N numarası verildiğinde, yalnızca N'den büyük sayıların kalması için listeyi filtreleyin. Örn L←3 1 4
ve N←1
verir 3 4
.
Bir dfn çözümü olabilir, N{(⍺<⍵)/⍵}L
ancak bunu yapıp kısalmak istersiniz. N(</⊢)L
Bağlayıcı kurallar bunu ayrıştıracağı için çalışmayacak, (</) ⊢
ancak operatörün azaltmasından ziyade /
işlev kopyası olmak istiyorsunuz .
Diyadik ⊆
bir BooleANDile sol argüman 1s ishal göre argüman bölümler sağ argüman sol bırakarak elemanları 0s ile gösterilir. Neredeyse istediğimiz bu, istenmeyen bölümlere ayırmak. Ancak, monadik uygulayarak bölümlemeden kurtulabiliriz ∊
. Böylece {(⍺<⍵)/⍵}
olabilir {∊(⍺<⍵)⊆⍵}
ve böylece trenimizi olarak yazabiliriz ∊<⊆⊢
.
Bunun yüksek dereceli diziler için çalışmadığını unutmayın.
0⊥
Bunun yerine ⊢/
veya ⊢⌿
sayısal değişkenlerle kullanın
Görev: ayağın en sağdaki eleman içeren bir liste L ve bir numara N, çarpma N Verilen L←3 1 4
ve N←2
verir 8
.
Bir dfn çözümü olabilir, N{⍺×⊢/⍵}L
ancak zımni yaparak kısaltmak istiyorsunuz. N(⊣×⊢/⊢)L
işe yaramayacak çünkü tren oluşum kuralları ⊣ (× ⊢/ ⊢)
bunu istediğiniz gibi ayrıştırıyor ⊣ × (⊢/⊢)
.
0⊥
Sayısal bir dizideki ile aynı olduğuna dikkat edin ⊢⌿
, böylece trenimizi şu şekilde yazabiliriz ⊣×0⊥⊢
.
Bunun, yüksek dereceli dizilerin son ana hücresini seçtiğini unutmayın.