เทคนิคในการจัดการกับ/
และ⌿
ในรถไฟ
เมื่อใช้รถไฟคุณอาจต้องการใช้ลดลงf/
เช่นผลรวมหรือแม้กระทั่งการลดซ้ำ+/
//
อย่างไรก็ตามหากรถไฟของคุณมีชิ้นส่วนมากขึ้นทางด้านซ้ายของการลดลงคุณต้องใช้วงเล็บเพื่อสร้างยอดเขา นี่คือเทคนิคบางอย่างในการบันทึกไบต์
ใช้1∊
แทน monadic ∨/
หรือ∨⌿
ในอาร์เรย์บูลีน
ภารกิจ: รับสตริง A และ B ที่มีความยาวเท่ากันสองสตริงส่งคืน 2 หากอักขระที่เกี่ยวข้องของ A และ B เท่ากับ 0 มิฉะนั้น เช่นA←'abc'
และB←'def'
ให้0
และA←'abc'
และช่วยให้B←'dec'
2
วิธีการแก้ปัญหา dfn อาจเป็นA{2×∨/⍺=⍵}B
แต่คุณต้องการที่จะสั้นลงโดยไปโดยปริยาย A(2×∨/=)B
ไม่ได้ไปทำงานเพราะกฎของการสร้างรถไฟแยกนี้เป็นแต่คุณต้องการ2 (× ∨/ =)
2 × (∨/=)
สังเกตว่า∨/
หรือ∨⌿
บนเวกเตอร์บูลีน ( ∨/,
หรือ∨⌿,
สำหรับอาร์เรย์ยศสูงกว่า) ถามว่ามีใด ๆ 1 ในปัจจุบันคือเพื่อให้เราสามารถเขียนรถไฟของเราเป็น1∊
2×1∊=
โปรดทราบว่า∊
ลบล้างอาร์กิวเมนต์ที่ถูกต้องดังนั้นคุณจึงไม่สามารถใช้เพื่อลดแต่ละแถวหรือคอลัมน์แยกกันได้
ใช้1⊥
แทน monadic +/
หรือ+⌿
ภารกิจ: รับรายการลิสต์ L และดัชนี N กลับมาที่ผลรวมของรายการ Nth สามครั้ง เช่นL←(3 1 4)(2 7)
และช่วยให้N←1
24
วิธีการแก้ปัญหา dfn อาจเป็นN{3×+/⍺⊃⍵}L
แต่คุณต้องการที่จะสั้นลงโดยไปโดยปริยาย N(3×+/⊃)L
ไม่ได้ไปทำงานเพราะกฎของการสร้างรถไฟแยกนี้เป็นแต่คุณต้องการ3(× +/ ⊃)
3 × (+/⊃)
สังเกตว่าการประเมินรายการของตัวเลขในเอกนารี (ฐาน -1) เท่ากับการรวมรายการเนื่องจาก ∑ { a , b , c , d } = a + b + c + d = ( a ×1³) + ( b ×1² ) + ( c ×1¹) + ( d ×1⁰) ดังนั้นจึง+/a b c d
เป็นเช่นเดียวกับเราและเราสามารถเขียนรถไฟของเราเป็น1⊥a b c d
3×1⊥⊃
โปรดทราบว่าข้อโต้แย้งอันดับที่สูงขึ้นเทียบเท่ากับ1⊥
+⌿
ใช้f.g
แทนf/g
ด้วยอาร์กิวเมนต์เซนต์คิตส์และเนวิสและ / หรือ
ภารกิจ: กำหนด L รายการและจำนวน N, กลับช่วง 1 อย่างละเอียดจำนวนที่เหลือส่วนที่ต่ำสุดเมื่อองค์ประกอบของการเปิด L โดยแบ่งเป็น NEG L←31 41 59
และช่วยให้N←7
1 2 3
วิธีการแก้ปัญหา dfn อาจเป็นN{⍳⌊/⍺|⍵}L
แต่คุณต้องการที่จะสั้นลงโดยไปโดยปริยาย N(⍳⌊/|)L
ไม่ได้ไปทำงานเพราะกฎของการสร้างรถไฟแยกนี้เป็นแต่คุณต้องการ⍳ (⌊/) |
⍳ (⌊/|)
ผลิตภัณฑ์ภายในA f.g B
ของสเกลาสองฟังก์ชั่นเมื่อข้อโต้แย้งที่มีสเกลาร์และ / หรือพาหะเป็นเช่นเดียวf/ A g B
เพราะทั้งสอง(A[1] g B[1]) f (A[2] g B[2]) f (A[3] g B[3])
ฯลฯ ⍳⌊.|
ดังนั้นเราจึงสามารถเขียนรถไฟของเราเป็น
โปรดทราบว่าสิ่งนี้ไม่สามารถใช้กับอาร์เรย์อันดับที่สูงกว่าได้
ใช้∊⊆
แทน/
ด้วยอาร์กิวเมนต์บูลีนด้านซ้ายและเวกเตอร์ขวาอย่างง่าย
ภารกิจ: เมื่อรับรายการ L และตัวเลข N ให้กรองรายการเพื่อให้เหลือเฉพาะตัวเลขที่มากกว่า N เช่นL←3 1 4
และช่วยให้N←1
3 4
วิธีการแก้ปัญหา dfn อาจเป็นN{(⍺<⍵)/⍵}L
แต่คุณต้องการที่จะสั้นลงโดยไปโดยปริยาย N(</⊢)L
ไม่ได้ไปทำงานเพราะกฎระเบียบที่มีผลผูกพันจะแยกนี้เป็น(</) ⊢
แต่คุณต้องการ/
ที่จะเป็นฟังก์ชั่นซ้ำมากกว่าผู้ประกอบการลด
Dyadic ที่⊆
มีบูลีนอาร์กิวเมนต์ซ้ายจะแบ่งอาร์กิวเมนต์ที่ถูกต้องตามการรันของ 1s ในอาร์กิวเมนต์ซ้ายโดยปล่อยองค์ประกอบที่ระบุด้วย 0s เกือบจะเป็นสิ่งที่เราต้องการบันทึกสำหรับการแบ่งพาร์ติชันที่ไม่พึงประสงค์ ∊
อย่างไรก็ตามเราสามารถกำจัดแบ่งพาร์ทิชันโดยใช้เอก ดังนั้น{(⍺<⍵)/⍵}
จะกลายเป็นและทำให้เราสามารถเขียนรถไฟของเราเป็น{∊(⍺<⍵)⊆⍵}
∊<⊆⊢
โปรดทราบว่าสิ่งนี้ไม่สามารถใช้กับอาร์เรย์อันดับที่สูงกว่าได้
ใช้0⊥
แทน⊢/
หรือ⊢⌿
ด้วยอาร์กิวเมนต์ตัวเลข
ภารกิจ: กำหนด L รายการและจำนวน N, คูณ N กับองค์ประกอบด้านขวาสุดของขาL←3 1 4
และช่วยให้N←2
8
วิธีการแก้ปัญหา dfn อาจเป็นN{⍺×⊢/⍵}L
แต่คุณต้องการที่จะสั้นลงโดยไปโดยปริยาย N(⊣×⊢/⊢)L
ไม่ได้ไปทำงานเพราะกฎของการสร้างรถไฟแยกนี้เป็นแต่คุณต้องการ⊣ (× ⊢/ ⊢)
⊣ × (⊢/⊢)
สังเกตว่า0⊥
บนอาร์เรย์ตัวเลขเป็นเช่นเดียวกับเพื่อให้เราสามารถเขียนรถไฟของเราเป็น⊢⌿
⊣×0⊥⊢
โปรดทราบว่านี่เป็นการเลือกเซลล์หลักสุดท้ายของอาร์เรย์ลำดับที่สูงกว่า