2010-11-06 15 views
10

यह प्रश्न 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 प्रकार कमांड के उच्च-स्तर के बराबर कैसे बनाते हैं?

+0

Btw, के बाद से व्याख्या सामान्य मूल्यांकन के दौरान ठीक काम करता है, यह सिर्फ "कन्वर्ट करने के लिए" प्रकार के मूल्यांकन के साथ एक बग ... – Simon

+0

M'ma 7.0.1/लिनक्स AMD64 पर दोहराने में असमर्थ हो सकता है। अपनी व्याख्या [] अभिव्यक्ति का परीक्षण "myPlus [ए, बी, सी]" के रूप में किया। किसी भी कठिनाई के बिना आगे और पीछे परिवर्तित करता है। –

+0

@Eric यह वही संस्करण और सिस्टम है जो मैं चला रहा हूं। मैंने यह देखने के लिए डब्ल्यूआरआई को एक बग रिपोर्ट भेजी है कि क्या वे व्यवहार को पुन: पेश करते हैं या नहीं। – Simon

उत्तर

11

मैं इस बारे में एक सहयोगी के साथ परामर्श किया, और उनकी सिफारिश अनिवार्य है कि MakeBoxes पर अप-मूल्य परिभाषाओं डाल के रूप में आप का प्रदर्शन जब आप चाहते हैं बातें कसकर वापस इनपुट करने के लिए उत्पादन से एकीकृत किया जाना Format का उपयोग कर से बेहतर है था। Format वास्तव में उत्पादन का उत्पादन करने के लिए है कि इनपुट के रूप में फिर से इस्तेमाल किया जा सकता, लेकिन सिर्फ उत्पादन, इसलिए Interpretation साथ अप्रत्याशित प्रत्यावर्तन जब StandardForm को बदलने, आदि फ़ॉर्मेट करने के लिए

आप समारोह ToBoxes एक उपयोगी पूरक मिल सकती है इरादा नहीं है MakeBoxes पर।

अंत में, here's a tutorial बॉक्स संरचनाओं के बारे में।

HTH!

+0

धन्यवाद माइकल। अजीब चीज यह है कि जब आप "जगह पर मूल्यांकन करते हैं" सिवाय इसके कि निर्माण ठीक काम करता है। डब्लूआरआई में एक समर्थन लड़के ने मेरे लिए एक बग रिपोर्ट जमा कर दी है। अभी के लिए, मैं 'मेकबॉक्स' (और 'ToBoxes') का उपयोग जारी रखूंगा। – Simon

संबंधित मुद्दे