यह एक शाखा और का विस्तार है: Is it safe to turn off Pattern::patv?मेथेमेटिका में लचीला तर्क हैंडलिंग कार्य करता
कई निर्मित मेथेमेटिका कार्यों की अनुमति देते हैं लचीला तर्क। उपयोगकर्ता द्वारा परिभाषित कार्यों में मैं इस उद्देश्य के लिए Alternatives
का उपयोग कर रहा हूं, लेकिन संदर्भित प्रश्नों के उत्तर और उत्तरों से संकेत मिलता है कि यह कम से कम गैर मानक है, और शायद अवांछित है।
मुझे एक उदाहरण के रूप में एक डमी फ़ंक्शन foo
परिभाषित करने दें।
Off[Pattern::patv]
p = {_?NumericQ, _?NumericQ};
foo[
{x : p ..} | x : p,
{y__} | y__,
ops : OptionsPattern[]
] /; Max[y] <= 10 := bar[#, y, ops] & /@ {x}
foo
स्वीकार करता है, क्रम में:
- एक वस्तु मिलान पैटन
p
, या इस तरह की वस्तुओं की एक सूची। - 10 की एक अधिकतम मूल्य के साथ परोक्ष सांख्यिक वस्तुओं का एक सेट, या तो सूची या तर्कों के एक दृश्य
OptionsPattern[]
मिलान
- विकल्प (के रूप में इन वस्तुओं लिखा खुद को 10 की एक अधिकतम मूल्य के साथ संख्यात्मक सूचियों हो सकता है) के रूप में
यदि इनमें से कोई भी स्थिति पूरी नहीं हुई है, तो foo[args]
अनचाहे वापस कर दिया गया है।
Alternatives
(|
) का उपयोग करने वाले दो पैटर्न सबसे आम मामले हैं, लेकिन वे अनन्य नहीं हैं।
मैं यह देखने के लिए संघर्ष करता हूं कि foo
को सर्वोत्तम तरीके से कार्यान्वित किया जाना चाहिए।
इसे पूरा करने के लिए कैननिक तरीका क्या है?
Alternatives
का उपयोग करने पर इसके क्या फायदे हैं?क्या यह आसानी से पढ़ना आसान है?
उत्तर देने के लिए धन्यवाद। कृपया कुछ कोड नमूने शामिल करें, विशेष रूप से आप कैसे कार्यान्वित करेंगे "यदि इनमें से कोई भी स्थिति पूरी नहीं हुई है, तो foo [args] को अनावश्यक रूप से वापस कर दिया गया है।" विधियों के साथ 1. और 2. (मुझे लियोनिद की विधि पता है, लेकिन क्या आप इसका उपयोग करते हैं?) –
@ श्री विज़ार्ड, मुझे कुछ घंटे दें। मैंने इसे अपने सिर के ऊपर से लिखा, और किसी भी कोड के नमूने नहीं फेंक दिया था। – rcollyer
कोई जल्दी नहीं है; धन्यवाद। –