सबसे पहले मुझे लगता है कि आपने यहां एक बग का खुलासा किया है।
दूसरा मुझे लगता है कि मैं, क्यों यह हो रहा है के लिए कुछ अंतर्दृष्टि प्रदान कर सकते हैं ध्यान में रखते हुए mathematica के आंतरिक भागों की मेरी जानकारी सीमित हैं।
की तरह एक बयान: च [z_]: = 2 पूर्ण रूप में जेड है:
SetDelayed[f[Pattern[z, Blank[]]], 2 z]
यह DownValue [च] करने के लिए सेट:
{HoldPattern[f[z_]] :> 2 z}
फिर बाद में जब एक अभिव्यक्ति, च की तरह [2], बाद में निम्नलिखित preformed की जा रही है की तरह कुछ का मूल्यांकन किया जाता है:
f[2] /. HoldPattern[f[z_]] :> 2 z
कौन सा 4. करने के लिए मूल्यांकन करेगा अब यह सब पो है ssible क्योंकि पहले कोड ब्लॉक से पैटर्न मिलान [z, खाली []] के साथ पैटर्न मिलान हो रहा है। यह तब भी काम करता है जब आपने बड़े पैमाने पर ज़ेड को सेट किया हो। दूसरे शब्दों में।
z = 5;
f[z_] := 2*z
फिर भी च के लिए एक ही downvalues पैदा करता है:
{HoldPattern[f[z_]] :> 2 z}
यह संभव है क्योंकि पैटर्न HoldFirst गुण है।
यदि आप मॉड्यूल के अंदर इसका मूल्यांकन करते हैं तो होल्डफ़ास्ट विशेषता पर्याप्त सुरक्षा नहीं है। उदाहरण:
SetAttributes[tmp, HoldFirst];
Module[{expr},
expr = 2 z;
tmp[expr]
]
आउटपुट:
tmp[expr$8129]
मेरा प्रस्ताव है कि कि कि एक स्थानीय चर शामिल किसी नियम में किसी भी पैटर्न उनके पैटर्न चर फिर से लिखा है, क्योंकि HoldFirst गुण मॉड्यूल के चर पुनर्लेखन नियम के लिए प्रतिरक्षा प्रदान नहीं करता है । sym-> प्रतीक [SymbolName [प्रतीक] ~~ "$"]
Module[{expr},
Hold[z_ -> (z; expr)]
]
(*Hold[z$_ -> (z$; expr$1391)]*)
z एक सरल अल्फा रूपांतरण में शासन के दोनों किनारों पर लिखा जा चुका है।
नियम एक स्थानीय चर कोई पुनर्लेखन होता नहीं है, तो:
Module[{expr},
Hold[z_ -> (z)]
]
(*Hold[z_ -> z]*)
बल्कि फिर अगर एक स्थानीय चर एक नियम चर ऊपर कंबल नियम लागू किया जाता है से मेल खाता देखने के लिए खोज।
तो समस्या यह है कि अल्फा रूपांतरण होने से पहले स्थानीय निकास का मूल्यांकन नहीं किया जाता है। या शायद बेहतर तरीके से एक आलसी मूल्यांकन अल्फा रूपांतरण में लपेटा जाना चाहिए जो नियमदेलेड के लिए आवश्यक होगा।
यह ब्लॉक में नहीं होता है क्योंकि ब्लॉक किसी स्थानीय चर को फिर से लिखता नहीं है।
कोई अन्य विचार? कोई भी मेरे तर्क में कोई छेद देखता है?
वाह, मैं जो कुछ भी एक सुंदर काम नहीं कहूंगा, लेकिन प्रभावशाली काम यह पता लगा रहा है! – dreeves
यही कारण है कि मैं हर दिन SO पर वापस आ जाता हूं। मुझे कुछ एस ** टी :-) सीखता है। – Timo
मैं अजीब अल्फा रूपांतरण में लपेटकर एक्सपेर होने के बजाय अप्रत्याशित प्रदर्शन हिट लेता हूं बल्कि असंगत वाक्यविन्यास से निपटता हूं। यहां खेलने के लिए भाषा डिजाइन विचार क्या चल रहे हैं? – Davorak