यह प्रश्न Preventing “Plus” from rearranging things में माइकल पिलैट द्वारा दिए गए उत्तर से मिलता है। वहां उन्होंने एक कस्टम +
मैं प्रारूप/व्याख्या गणित निर्माण में पुनरावृत्ति को कैसे रोकूं?
समस्या के साथ इस कॉपी और पेस्ट उत्पादन (हालांकि% या बाहर [] अभी भी काम करता है) नहीं कर सकता है का उपयोग कर अंकन में परिभाषित किया। इसके आस-पास पहुंचने के लिए आपको Interpretation
टाइप सुविधा का उपयोग करना चाहिए जो अभिव्यक्ति को एक चीज़ के रूप में प्रदर्शित करने की अनुमति देता है, लेकिन इनपुट के रूप में आपूर्ति किए जाने पर दूसरे के रूप में व्याख्या किया जाता है। माइकल के जवाब का मेरा संशोधन
Format[myPlus[expr__]] := Interpretation[Row[{expr}, "+"], myPlus[expr]]
इसे कॉपी और सफलतापूर्वक चिपकाया जा सकता है। समस्या कॉपी किए गए अभिव्यक्तियों को संशोधित करने में निहित है। आप प्रतिलिपि अभिव्यक्ति को InputForm
पर Ctrl-Shift-I
का उपयोग करके परिवर्तित कर सकते हैं, फिर अपनी इच्छानुसार कुछ भी बदलें और किसी भी अभिव्यक्ति में InputForm
का उपयोग करें। लेकिन यदि आप इसे पर Ctrl-Shift-N
का उपयोग करके बदलने की कोशिश करते हैं तो आप एक रिकर्सन दर्ज करते हैं जहां Interpretation
में दूसरा तर्क बार-बार मूल्यांकन किया जाता है। यह Interpretation
विशेषता HoldAll
(जो सामान्य मूल्यांकन के दौरान ठीक से काम करता है) के बावजूद है।
आम तौर पर, जब सरल अंकन को परिभाषित मैं निम्न स्तर MakeBoxes
, जैसे
myPlus/:MakeBoxes[myPlus[expr__],fmt_]:=With[{r=Riffle[MakeBoxes/@{expr},"+"]},
InterpretationBox[RowBox[r],myPlus[expr]]]
जो पूरी तरह से काम करता है का उपयोग करें, तो मैं पहले इस प्रत्यावर्तन समस्या हुई है नहीं किया है।
तो मेरे सवाल (अंततः) है: क्या मेरी Format
प्रकार कमांड के साथ गलत हो गया था और से यह कैसे तय कर सकते हैं? या: आप मेरे MakeBoxes
प्रकार कमांड के उच्च-स्तर के बराबर कैसे बनाते हैं?
Btw, के बाद से व्याख्या सामान्य मूल्यांकन के दौरान ठीक काम करता है, यह सिर्फ "कन्वर्ट करने के लिए" प्रकार के मूल्यांकन के साथ एक बग ... – Simon
M'ma 7.0.1/लिनक्स AMD64 पर दोहराने में असमर्थ हो सकता है। अपनी व्याख्या [] अभिव्यक्ति का परीक्षण "myPlus [ए, बी, सी]" के रूप में किया। किसी भी कठिनाई के बिना आगे और पीछे परिवर्तित करता है। –
@Eric यह वही संस्करण और सिस्टम है जो मैं चला रहा हूं। मैंने यह देखने के लिए डब्ल्यूआरआई को एक बग रिपोर्ट भेजी है कि क्या वे व्यवहार को पुन: पेश करते हैं या नहीं। – Simon