2011-07-15 19 views
5

में f @ expr और expr // f का उपयोग करके विभिन्न परिणाम मैं Prefix और Postfix ऑपरेटरों (@ और // क्रमशः क्रमशः) के साथ खेल रहा था और मैं निम्नलिखित समस्या में भाग गया।गणित

को देखते हुए निम्नलिखित कोड है, वे एक ही सटीक तरीके से मूल्यांकन:

Hold[[email protected]@data] // FullForm 
(* Hold[MatrixPlot[Sort[data]]] *) 

Hold[data // Sort // MatrixPlot] // FullForm 
(* Hold[MatrixPlot[Sort[data]]] *) 

हालांकि, निम्नलिखित भाव को देखते हुए, मैं अलग परिणाम प्राप्त:

[email protected]'[0] 
(* Abs'[0] *) 

Abs'[0] // FunctionExpand 
(* 0 *) 

मैं वास्तव में काफी यकीन नहीं है यह क्यों है कोड के दर्जनों अन्य स्निपेट में, [email protected], expr // f, और f[expr] सभी एक ही परिणाम का मूल्यांकन करते हैं। यह एक विशेष मामला यह परिणाम क्यों देता है?

+2

यह लिंक संभवतः प्रासंगिक है: http://www.mathprogramming-intro.org/book/node174.html, जहां मैं समान प्राथमिकता से संबंधित मुद्दों पर चर्चा करता हूं। मूल अभिव्यक्ति पर 'फुलफॉर्म' का उपयोग करना अक्सर मदद करता है। –

+0

@ लियोनीड 'फुलफॉर्म' यह देखने का एक बेहतर तरीका है कि मैंने जो सुझाव दिया है उससे क्या हो रहा है; मैंने इसे अपने उत्तर में जोड़ा, आशा है कि आपको – acl

+0

@acl ग्रेट नहीं लगेगा! जब आप बाहर आए, तो मैं इसका जवाब लिख रहा था, इसलिए मैंने अपना त्याग दिया, आपके लिए वोट दिया और लिंक छोड़ दिया। दोनों दृष्टिकोण सूचीबद्ध होना अच्छा है। –

उत्तर

10

यह एक प्राथमिकता मुद्दा है। // की तुलना में @ की प्राथमिकता है। यह देखने के लिए कि क्या हो रहा है, कर्सर को दोनों मामलों में FunctionExpand पर रखें, फिर cmd +। (ओएस एक्स पर) या ctrl +। किसी और चीज पर, और आप चीजों को प्राथमिकता से चुनते हैं।

एक और तरीका है देखने के लिए यह Trace उपयोग करने के लिए है:

[email protected]'[0] // Trace 
(* 
-> {{{FunctionExpand[Abs],Abs},Abs^\[Prime]},(Abs^\[Prime])[0]} 
*) 

जबकि

Abs'[0] // FunctionExpand//Trace 
(* 
-> {FunctionExpand[(Abs^\[Prime])[0]],0} 
*) 

विशेष रूप से, ध्यान दें कि किस पहला मामला एमएमए में पहली FunctionExpand[Abs] मूल्यांकन करता है,, Abs प्राप्त तो जारी है। की तुलना में यह @ बाध्यता के कारण ठीक है।

संपादित करें: द्वारा @ लियोनिद की टिप्पणी प्रेरित होकर, यह भी जानकारीपूर्ण है:

Hold[[email protected]'[0]] // FullForm 
Hold[Abs'[0] // FunctionExpand] // FullForm 
(* 
-> Hold[Derivative[1][FunctionExpand[Abs]][0]] 
    Hold[FunctionExpand[Derivative[1][Abs][0]]] 
*) 

जो क्या चल रहा है की एक बहुत अच्छा प्रदर्शन है।

+0

धन्यवाद, यह मेरे प्रश्न का पूरी तरह उत्तर देता है । –