ฉันชอบการเขียนโปรแกรมที่ใช้งานได้ใน Octave แต่ในทางปฏิบัติมันค่อนข้างไม่สะดวก ฉันสงสัยเกี่ยวกับวิธีที่สั้นที่สุดในการกำหนดฟังก์ชั่นวนซ้ำแบบไม่ระบุชื่อ
ฉันมีความคิดบางอย่าง แต่ฉันสงสัยว่าถ้ามีวิธีที่จะรวมความคิดเหล่านี้เพื่อทำให้สั้นลง เพื่อประโยชน์ของคำถามนี้ให้นับซ้ำเป็นศูนย์ซ้ำ (เพื่อให้ส่วนของข้อมูลง่ายที่สุดเท่าที่จะทำได้)
หากเหตุผลของฉันถูกต้องไม่มีชื่อตัวแปรที่ฉันใช้ในตัวอย่างต่อไปนี้ควรทับซ้อนกัน ฟังก์ชั่นที่ต้องการคือq(n)
ซึ่งควรกลับเป็นศูนย์เสมอ i
ถูกนำมาใช้เป็นตัวแปรเคาน์เตอร์f
เป็นฟังก์ชันเวียนซึ่งเราเรียกในขอบเขตของท้องถิ่นg
f
44 ไบต์ "คำจำกัดความแบบอินไลน์ของf
"
q=@(n)(f=@(g,i){@()g(g,i-1),i}{~i+1}())(f,n)
44 ไบต์ "คำนิยามรายการอาร์กิวเมนต์ของf
"
q=@(n,f=@(g,i){@()g(g,i-1),i}{~i+1}())f(f,n)
44 ไบต์ "คำจำกัดความที่แยกต่างหากของf
"
f=@(i,g){@()g(i-1,g),i}{~i+1}();q=@(n)f(n,f)
41 ไบต์ "ฟังก์ชันที่ต้องการเป็นค่าส่งคืน"
f=@(g)@(n){@()g(g)(n-1),n}{~n+1}();q=f(f)
ว่า 'ชนะ' ปัจจุบันมีแรงบันดาลใจจากคำตอบนี้โดย flawr อย่างไรก็ตามด้วยวิธีการที่หลากหลายในการทำสิ่งนี้บางทีใครบางคนอาจคิดถึงวิธีการที่สั้นลง
แน่นอนว่าเป้าหมายของมันคือให้ต่ำกว่า 39 ไบต์สำหรับฟังก์ชั่น "เต็ม" ลองออนไลน์!