J , 16 11 ไบต์
(+$:)^:=1+?
ลองออนไลน์!
คำอธิบาย
TL; DR 1+?
ทำการรีดตาย, จะทำ(+$:)^:=
ซ้ำเฉพาะเมื่อเท่ากับอินพุต
ฟังก์ชั่นเป็นขบวนคำกริยา 4 คำ:
┌─ +
┌───┴─ $:
┌─ ^: ─┴─ =
│
──┤ ┌─ 1
└──────┼─ +
└─ ?
รถไฟคือเมื่อมีคำกริยา 2 ตัวหรือมากกว่าถูกต่อกัน นี่คือคำตอบของแบบฟอร์มf g h j
:
(+$:)^:= 1 + ?
f g h j
สิ่งที่เรียกว่า "4 รถไฟ" จะถูกแยกวิเคราะห์เป็นเบ็ดและส้อม:
f g h j ⇔ f (g h j)
ดังนั้นคำตอบจึงเท่ากับ:
(+$:)^:= (1 + ?)
Hooks: (f g) x
และx (f g) y
monadic hook (one-argument) ของคำกริยาสองตัวที่ได้รับการโต้แย้งx
การเทียบเท่าต่อไปนี้ถือ
(f g) x ⇔ x f (g x)
ยกตัวอย่างเช่นการ(* -) 5
ประเมินซึ่งประเมิน5 * (- 5)
_25
ซึ่งหมายความว่ารถไฟ 4 ขบวนของเรามีระบบf
และ(g h j)
เทียบเท่ากับ:
(f (g h j)) x ⇔ x f ((g h j) x)
แต่ที่f
นี่ทำอะไร (+$:)^:=
คือการรวมกันของคำกริยาสองคำโดยใช้การรวมพลัง^:
: ตะขออีกอัน ( (+$:)
) และกริยา ( =
) โปรดทราบว่านี่f
คือdyadic - มีสองอาร์กิวเมนต์ ( x
และ(g h j) x
) ดังนั้นเราต้องดูว่ามัน^:
มีพฤติกรรมอย่างไร การรวมพลังf^:o
จะใช้กริยาf
และทั้งกริยาหรือคำนามo
(นามเป็นเพียงส่วนหนึ่งของข้อมูล) และใช้f
o
เวลา o = 3
ตัวอย่างเช่นใช้ ความเท่าเทียมกันดังต่อไปนี้ถือ:
(f^:3) x ⇔ f (f (f x))
x (f^:3) y ⇔ x f (x f (x f y))
ถ้าo
เป็นคำกริยาการรวมพลังจะประเมินo
เหนือข้อโต้แย้งและใช้ผลลัพธ์คำนามเป็นจำนวนซ้ำ
สำหรับคำกริยาของเราo
คือ=
กริยาที่เท่าเทียมกัน มันประเมินเพื่อ0
หาข้อโต้แย้งที่แตกต่างและ1
สำหรับข้อโต้แย้งที่เท่าเทียมกัน เราทำซ้ำฮุก(+$:)
หนึ่งครั้งเพื่อหาข้อโต้แย้งที่เท่าเทียมกันและไม่มีเวลาสำหรับคำที่ต่างกัน y ⇔ ((g h j) x)
เพื่อความสะดวกในสัญกรณ์สำหรับคำอธิบายให้ โปรดจำไว้ว่าตะขอเริ่มต้นของเราเทียบเท่ากับสิ่งนี้:
x (+$:)^:= ((g h j) x)
x (+$:)^:= y
การขยายการรวมนี่จะกลายเป็น:
x ((+$:)^:(x = y)) y
หากx
และy
เหมือนกันสิ่งนี้จะกลายเป็น:
x (+$:)^:1 y ⇔ x (+$:) y
มิฉะนั้นจะกลายเป็น:
x (+$:)^:0 y ⇔ y
ตอนนี้เราได้เห็นส้อมแบบ monadic แล้ว ที่นี่เรามีส้อมส้อม:
x (f g) y ⇔ x f (g y)
ดังนั้นเมื่อx
และy
เหมือนกันเราจะได้รับ:
x (+$:) y ⇔ x + ($: y)
คือ$:
อะไร มันหมายถึงคำกริยาทั้งหมดและช่วยให้การเรียกซ้ำ ซึ่งหมายความว่าเมื่อใดx
และ y are the same, we apply the verb to
y and add
x` ไป
Forks: (g h j) x
ตอนนี้ส้อมด้านในทำอะไร? นี่เป็นy
ตัวอย่างสุดท้ายของเรา สำหรับ monadic fork ของคำกริยาสามตัว, ได้รับการโต้แย้งx
, การระงับความเสมอกันดังต่อไปนี้:
(g h j) x ⇔ (g x) h (j x)
ตัวอย่างต่อไปนี้สมมติว่าเรามีคำกริยาชื่อSUM
, DIVIDE
และLENGTH
ซึ่งทำในสิ่งที่คุณคิดว่าพวกเขาอาจจะ หากเราต่อสามสิ่งเข้าด้วยกันเราจะได้:
(SUM DIVIDE LENGTH) x ⇔ (SUM x) DIVIDE (LENGTH x)
ทางแยกนี้ประเมินค่าเฉลี่ยของx
(สมมติว่าx
เป็นรายการของตัวเลข) ใน J +/ % #
เราต้องการจริงเขียนนี้เป็นตัวอย่างเป็น
สิ่งสุดท้ายที่เกี่ยวกับส้อม เมื่อ "Tine" ซ้ายสุด (ในกรณีที่เป็นสัญลักษณ์ของเราด้านบนg
) เป็นคำนามคำสั่งจะถือว่าเป็นฟังก์ชันคงที่ที่ส่งคืนค่านั้น
ด้วยสิ่งเหล่านี้ทั้งหมดเราสามารถเข้าใจทางด้านบน:
(1 + ?) x ⇔ (1 x) + (? x)
⇔ 1 + (? x)
?
[ 0 , x )[ 1 , x ]
วางมันทั้งหมดเข้าด้วยกัน
เมื่อรับทุกสิ่งเหล่านี้คำกริยาของเราเทียบเท่ากับ:
((+$:)^:=1+?) x ⇔ ((+$:)^:= 1 + ?) x
⇔ ((+$:)^:= (1 + ?)) x
⇔ x ((+$:)^:=) (1 + ?) x
⇔ x ((+$:)^:=) (1 + (? x))
⇔ x (+$:)^:(x = (1 + (? x))
(let y = 1 + (? x))
if x = y ⇒ x + $: y
otherwise ⇒ y
เป็นการแสดงออกถึงฟังก์ชั่นที่ต้องการ