ऑक्टेव में एक अनाम पुनरावर्ती कार्य को परिभाषित करने का सबसे छोटा तरीका क्या है?


12

मुझे ऑक्टेव में कार्यात्मक प्रोग्रामिंग पसंद है, लेकिन यह व्यवहार में बहुत ही सुंदर है। मैं एक गुमनाम पुनरावर्ती कार्य को परिभाषित करने के सबसे छोटे तरीके के बारे में सोच रहा हूं।

मेरे पास कुछ विचार हैं, लेकिन मैं सोच रहा हूं कि क्या इन विचारों को संयोजित करने का एक तरीका है कि उन्हें और भी कम (या उतना ही छोटा लेकिन अधिक बहुमुखी) बनाया जा सके। इस प्रश्न की खातिर, चलो पुनरावर्ती को शून्य तक गिनें (बस पेलोड को यथासंभव सरल रखने के लिए)।

यदि मेरा तर्क सही है, तो निम्नलिखित उदाहरणों में मेरे द्वारा उपयोग किए गए कोई भी चर नाम ओवरलैप नहीं होना चाहिए। वांछित फ़ंक्शन है 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)

वर्तमान 'विजेता' इस जवाब से प्रेरित है । हालांकि, ऐसा करने के लिए विभिन्न तरीकों की बड़ी रेंज को देखते हुए, शायद कोई भी तरीकों के एक छोटे संयोजन के बारे में सोच सकता है।

लक्ष्य निश्चित रूप से इसे "पूर्ण" फ़ंक्शन के लिए 39 बाइट्स से नीचे प्राप्त करना है, इसे ऑनलाइन आज़माएं!

जवाबों:


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.