วิธีที่สั้นที่สุดในการกำหนดฟังก์ชั่นวนซ้ำแบบไม่ระบุชื่อใน Octave คืออะไร


12

ฉันชอบการเขียนโปรแกรมที่ใช้งานได้ใน 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 ไบต์สำหรับฟังก์ชั่น "เต็ม" ลองออนไลน์!

คำตอบ:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.