मैं एक गतिशील रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा में उपलब्ध करी और वैरेडिक कार्यों को बनाने के बारे में सोच रहा हूं, लेकिन मुझे आश्चर्य है कि यह संभव है या नहीं।
यहाँ कुछ छद्मकोड हैं:
sum = if @args.empty then 0 else @args.head + sum @args.tail
जो माना जाता है कि इसके सभी तर्कों का योग है। फिर, यदि sumखुद को एक नंबर माना जाता है, तो इसका परिणाम है 0। उदाहरण के लिए,
sum + 1
1 के बराबर है, यह मानते हुए कि +केवल संख्याओं पर काम कर सकते हैं। हालांकि, यह भी sum == 0सच है, sumफिर भी अपने मूल्य और कार्यात्मक संपत्ति को बनाए रखेगा चाहे कोई भी तर्क दिया जाए (इसलिए "आंशिक रूप से लागू किया गया" और "वैरेडिक" एक ही समय में), उदाहरण के लिए, अगर मैं घोषणा करता हूं
g = sum 1 2 3
तब gके बराबर है 6, हालांकि, हम अभी भी आगे आवेदन कर सकते हैं g। उदाहरण के लिए, g 4 5 == 15सत्य है। इस स्थिति में, हम ऑब्जेक्ट gको शाब्दिक रूप से प्रतिस्थापित नहीं कर सकते हैं 6, क्योंकि जब वे पूर्णांक के रूप में व्यवहार किए जाते हैं, तो समान मान प्राप्त करते हैं, उनके अंदर अन्य कोड होते हैं।
यदि इस डिज़ाइन का उपयोग वास्तविक प्रोग्रामिंग भाषा में किया जाता है, तो क्या यह किसी भ्रम या अस्पष्टता का कारण होगा?
sumहै 0एक तर्क के बिना और रिकर्सिवली एक तर्क के साथ खुद को कहता है।
reduce?
args: empty, head, और tail। वे सभी सूची कार्य हैं, जो यह सुझाव देते हैं कि शायद आसान और अधिक सीधी बात यह है कि एक सूची का उपयोग करना होगा जहां वैरेडिक सामान होगा। (इसलिए, sum [1, 2, 3]इसके बजाय sum 1 2 3)