วิธีที่สั้นที่สุดในการกำหนดฟังก์ชั่นวนซ้ำแบบไม่ระบุชื่อใน Octave คืออะไร
ฉันชอบการเขียนโปรแกรมที่ใช้งานได้ใน Octave แต่ในทางปฏิบัติมันค่อนข้างไม่สะดวก ฉันสงสัยเกี่ยวกับวิธีที่สั้นที่สุดในการกำหนดฟังก์ชั่นวนซ้ำแบบไม่ระบุชื่อ ฉันมีความคิดบางอย่าง แต่ฉันสงสัยว่าถ้ามีวิธีที่จะรวมความคิดเหล่านี้เพื่อทำให้สั้นลง เพื่อประโยชน์ของคำถามนี้ให้นับซ้ำเป็นศูนย์ซ้ำ (เพื่อให้ส่วนของข้อมูลง่ายที่สุดเท่าที่จะทำได้) หากเหตุผลของฉันถูกต้องไม่มีชื่อตัวแปรที่ฉันใช้ในตัวอย่างต่อไปนี้ควรทับซ้อนกัน ฟังก์ชั่นที่ต้องการคือq(n)ซึ่งควรกลับเป็นศูนย์เสมอ iถูกนำมาใช้เป็นตัวแปรเคาน์เตอร์fเป็นฟังก์ชันเวียนซึ่งเราเรียกในขอบเขตของท้องถิ่นgf 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 ไบต์สำหรับฟังก์ชั่น "เต็ม" ลองออนไลน์!