मैं एक गतिशील रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा में उपलब्ध करी और वैरेडिक कार्यों को बनाने के बारे में सोच रहा हूं, लेकिन मुझे आश्चर्य है कि यह संभव है या नहीं।
यहाँ कुछ छद्मकोड हैं:
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
)