नाम
expr - एक अभिव्यक्ति का मूल्यांकन करें
सार
expr आर्ग ? तर्क तर्क … ?
concatenates आर्ग (उनके बीच विभाजक रिक्त स्थान जोड़ना), परिणाम को टीसीएल अभिव्यक्ति के रूप में मूल्यांकन करता है, और मान देता है। टीसीएल अभिव्यक्तियों में अनुमत ऑपरेटरों को सी अभिव्यक्तियों में अनुमत ऑपरेटरों का सबसेट होता है, और उनके पास समान सी ऑपरेटरों के समान अर्थ और प्राथमिकता होती है। अभिव्यक्ति लगभग हमेशा संख्यात्मक परिणाम उत्पन्न करती हैं (पूर्णांक या फ़्लोटिंग-पॉइंट मान)। उदाहरण के लिए, अभिव्यक्ति
एक्सपीआर 8.2 + 6
14.2 का मूल्यांकन टीसीएल अभिव्यक्ति सी अभिव्यक्तियों से अलग होती है जिस तरह से ऑपरेंड निर्दिष्ट होते हैं। इसके अलावा, टीसीएल अभिव्यक्ति गैर-संख्यात्मक संचालन और स्ट्रिंग तुलना का समर्थन करते हैं।
ऑपरेंड
एक टीसीएल अभिव्यक्ति में ऑपरेंड, ऑपरेटरों और कोष्ठक का संयोजन होता है। ऑपरेशन और ऑपरेटरों और कोष्ठक के बीच सफेद स्थान का उपयोग किया जा सकता है; अभिव्यक्ति के निर्देशों से इसे अनदेखा किया जाता है। जहां संभव हो, ऑपरेटरों को पूर्णांक मान के रूप में व्याख्या किया जाता है। इंटीजर मान दशमलव (सामान्य मामले) में, ऑक्टल में निर्दिष्ट किया जा सकता है (यदि ऑपरेंड का पहला अक्षर है0), या हेक्साडेसिमल में (यदि ऑपरेंड के पहले दो अक्षर हैं0x)। यदि किसी ऑपरेंड में ऊपर दिए गए पूर्णांक प्रारूपों में से एक नहीं है, तो यह संभव है तो इसे फ़्लोटिंग-पॉइंट नंबर के रूप में माना जाता है। फ़्लोटिंग-पॉइंट नंबर एएनएसआई-अनुपालन सी कंपाइलर द्वारा स्वीकार किए गए किसी भी तरीके से निर्दिष्ट किए जा सकते हैं (सिवाय इसके किच, एफ, एल, तथाएल अधिकांश प्रतिष्ठानों में प्रत्यय की अनुमति नहीं दी जाएगी)। उदाहरण के लिए, निम्नलिखित सभी मान्य फ़्लोटिंग-पॉइंट संख्याएं हैं: 2.1, 3., 6e4, 7.91e + 16। यदि कोई संख्यात्मक व्याख्या संभव नहीं है, तो एक ऑपरेंड स्ट्रिंग के रूप में छोड़ा जाता है (और ऑपरेटर का केवल सीमित सेट इसे लागू किया जा सकता है)।
संचालन निम्न में से किसी भी तरीके से निर्दिष्ट किया जा सकता है:
1
एक संख्यात्मक मान के रूप में, या तो पूर्णांक या फ़्लोटिंग-पॉइंट।
2
एक टीसीएल वैरिएबल के रूप में, मानक का उपयोग कर$ अंकन। चर के मूल्य का उपयोग ऑपरेंड के रूप में किया जाएगा।
3
डबल-कोट्स में संलग्न एक स्ट्रिंग के रूप में। अभिव्यक्ति पार्सर उद्धरण के बीच की जानकारी पर बैकस्लैश, चर, और कमांड प्रतिस्थापन करेगा, और परिणामी मान को ऑपरेंड के रूप में उपयोग करेगा
4
ब्रेसिज़ में संलग्न एक स्ट्रिंग के रूप में। खुले ब्रेस और मिलान करने वाले करीबी ब्रेस के बीच के पात्रों को बिना किसी प्रतिस्थापन के ऑपरेंड के रूप में उपयोग किया जाएगा।
5
ब्रैकेट में संलग्न एक टीसीएल कमांड के रूप में। आदेश निष्पादित किया जाएगा और इसका परिणाम ऑपरेंड के रूप में उपयोग किया जाएगा।
6
गणितीय फ़ंक्शन के रूप में जिनके तर्कों में ऑपरेटरों के लिए उपर्युक्त रूपों में से कोई भी है, जैसे किपाप ($ x)। परिभाषित कार्यों की सूची के लिए नीचे देखें।
जहां प्रतिस्थापन ऊपर होते हैं (उदा। उद्धृत तारों के अंदर), वे अभिव्यक्ति के निर्देशों द्वारा निष्पादित होते हैं। हालांकि, अभिव्यक्ति प्रोसेसर कहलाए जाने से पहले प्रतिस्थापन की अतिरिक्त परत पहले से ही पार्सर द्वारा निष्पादित की जा सकती है। जैसा कि नीचे चर्चा की गई है, कमांड पार्सर को सामग्री पर प्रतिस्थापन करने से रोकने के लिए ब्रेसिज़ में अभिव्यक्तियों को संलग्न करना सबसे अच्छा होता है।
सरल अभिव्यक्तियों के कुछ उदाहरणों के लिए, चर का मानना हैए मूल्य 3 और चर हैखमान 6 है। फिर नीचे दी गई प्रत्येक पंक्ति के बाईं तरफ कमांड लाइन के दाईं ओर मूल्य का उत्पादन करेगा:
expr 3.1 + $ a6.1 expr 2 + "$ a। $ b" 5.6 expr 4 * लम्बाई "6 2" 8 expr {{word one} <"word $ a"} 0
ऑपरेटर्स
वैध ऑपरेटरों को नीचे सूचीबद्ध किया गया है, प्राथमिकता के घटते क्रम में समूहित:
- + ~ !
यूनरी माइनस, यूनरी प्लस, बिट-वार नहीं, तार्किक नहीं। इन ऑपरेटरों में से कोई भी स्ट्रिंग ऑपरेटरों पर लागू नहीं किया जा सकता है, और बिट-वार न केवल पूर्णांक पर लागू किया जा सकता है।
* / %
गुणा करें, विभाजित करें, शेष। इन ऑपरेटरों में से कोई भी स्ट्रिंग ऑपरेंड पर लागू नहीं किया जा सकता है, और शेष केवल पूर्णांक पर लागू किया जा सकता है। शेष में हमेशा divisor के समान संकेत होगा और divisor से एक पूर्ण मूल्य छोटा होगा।
+ -
जोड़ें और घटाएं। किसी भी संख्यात्मक ऑपरेटरों के लिए मान्य।
<< >>
बाएं और दाएं शिफ्ट। केवल पूर्णांक ऑपरेटरों के लिए मान्य। एक सही शिफ्ट हमेशा साइन बिट का प्रचार करता है।
< > <= >=
बूलियन कम, अधिक, कम या बराबर, और इससे अधिक या बराबर। प्रत्येक ऑपरेटर 1 उत्पन्न करता है यदि स्थिति सत्य है, 0 अन्यथा। इन ऑपरेटरों को तारों के साथ-साथ संख्यात्मक ऑपरेटरों पर भी लागू किया जा सकता है, जिसमें मामले स्ट्रिंग तुलना का उपयोग किया जाता है।
== !=
बूलियन बराबर और बराबर नहीं है। प्रत्येक ऑपरेटर शून्य / एक परिणाम उत्पन्न करता है। सभी ऑपरेंड प्रकारों के लिए मान्य।
&
बिट-वार और। केवल पूर्णांक ऑपरेटरों के लिए मान्य।
^
बिट-वार अनन्य या। केवल पूर्णांक ऑपरेटरों के लिए मान्य।
|
बिट-वार या। केवल पूर्णांक ऑपरेटरों के लिए मान्य।
&&
तार्किक और। यदि 1 ऑपरेशन गैर-शून्य हैं, तो अन्यथा 1 परिणाम उत्पन्न करता है। बूलियन और न्यूमेरिक (पूर्णांक या फ़्लोटिंग-पॉइंट) के लिए मान्य केवल संचालित होता है।
||
तार्किक या। 0 परिणाम उत्पन्न करता है यदि दोनों ऑपरेटरों शून्य हैं, 1 अन्यथा। बूलियन और न्यूमेरिक (पूर्णांक या फ़्लोटिंग-पॉइंट) के लिए मान्य केवल संचालित होता है।
एक्स ? y : z
यदि-तो-और, जैसा कि सी में है एक्स गैर-शून्य का मूल्यांकन करता है, तो परिणाम का मूल्य होता है y । अन्यथा, परिणाम का मूल्य है z । एक्स ऑपरेंड के पास एक संख्यात्मक मूल्य होना चाहिए।
प्रत्येक ऑपरेटर द्वारा उत्पादित परिणामों पर अधिक जानकारी के लिए सी मैनुअल देखें। सभी बाइनरी ऑपरेटरों समूह एक ही प्राथमिकता स्तर के भीतर बाएं से दाएं दाएं। उदाहरण के लिए, आदेश
expr 4 * 2 <7
रिटर्न 0।
&&, ||, तथा?: ऑपरेटर के पास 'आलसी मूल्यांकन' होता है, जैसा कि सी में होता है, जिसका अर्थ यह है कि यदि परिणाम निर्धारित करने के लिए उनकी आवश्यकता नहीं होती है तो ऑपरेटरों का मूल्यांकन नहीं किया जाता है। उदाहरण के लिए, कमांड में
expr {$ v? ए: बी}
केवल एकए याख वास्तव में मूल्यांकन किया जाएगा, के मूल्य के आधार पर$ वी। नोट, हालांकि, यह केवल तभी सच है जब संपूर्ण अभिव्यक्ति ब्रेसिज़ में संलग्न है; अन्यथा, टीसीएल पार्सर दोनों का मूल्यांकन करेगाए तथाख आविष्कार करने से पहलेexpr आदेश।
गणित कार्य
टीसीएल अभिव्यक्तियों में निम्नलिखित गणितीय कार्यों का समर्थन करता है:
पेट सोंटालॉग इन करेंsqrt acos दोहराlog10srand जैसे की expपॉवतन एक भूरा मंज़िलहाशियाtanh atan2 fmodगोल प्लस्तर लगाना hypotपाप क्योंकि पूर्णांकसिंह
पेट ( आर्ग )
का पूर्ण मूल्य देता है आर्ग . आर्ग या तो पूर्णांक या फ़्लोटिंग-पॉइंट हो सकता है, और परिणाम उसी रूप में वापस आ जाता है।
acos ( आर्ग )
की चाप कोसाइन देता है आर्ग , सीमा 0, पीआई रेडियंस में। आर्ग सीमा में होना चाहिए -1,1।
जैसे की( आर्ग )
की चाप साइन करता है आर्ग , सीमा -पीआई / 2, पीआई / 2 रेडियंस में। आर्ग सीमा में होना चाहिए -1,1।
एक भूरा( आर्ग )
की चाप टेंगेंट देता है आर्ग , सीमा -पीआई / 2, पीआई / 2 रेडियंस में।
atan2 ( एक्स, वाई )
की चाप टेंगेंट देता है y / एक्स , सीमा -पीआई, पीआई रेडियंस में। एक्स तथा y दोनों 0 नहीं हो सकते हैं।
प्लस्तर लगाना ( आर्ग )
सबसे छोटा पूर्णांक मान कम से कम नहीं देता है आर्ग .
क्योंकि ( आर्ग )
कोसाइन देता है आर्ग , रेडियंस में मापा जाता है।
सोंटा ( आर्ग )
हाइपरबॉलिक कोसाइन देता है आर्ग । अगर परिणाम ओवरफ्लो का कारण बनता है, तो एक त्रुटि लौटा दी जाती है।
डबल ( आर्ग )
अगर आर्ग एक फ्लोटिंग वैल्यू है, रिटर्न आर्ग , अन्यथा बदलता है आर्ग फ़्लोटिंग और परिवर्तित मूल्य लौटाता है।
exp ( आर्ग )
के घातीय लौटता है आर्ग ई के रूप में परिभाषित ** आर्ग । अगर परिणाम ओवरफ्लो का कारण बनता है, तो एक त्रुटि लौटा दी जाती है।
मंज़िल( आर्ग )
सबसे बड़ा अभिन्न मूल्य वापस नहीं करता है आर्ग .
fmod ( एक्स, वाई )
विभाजन के फ्लोटिंग-पॉइंट शेष को वापस करता है एक्स द्वारा y । अगर y 0 है, एक त्रुटि लौटा दी गई है।
hypot ( एक्स, वाई )
एक दाएं कोण वाले त्रिभुज के hypotenuse की लंबाई की गणना करता है ( एक्स * एक्स + y * y ).
पूर्णांक ( आर्ग )
अगर आर्ग एक पूर्णांक मूल्य है, रिटर्न आर्ग , अन्यथा बदलता है आर्ग छंटनी से पूर्णांक करने के लिए और परिवर्तित मूल्य लौटाता है।
लॉग इन करें ( आर्ग )
प्राकृतिक लॉगरिदम देता है आर्ग . आर्ग एक सकारात्मक मूल्य होना चाहिए।
log10 ( आर्ग )
आधार 10 लॉगरिदम देता है आर्ग . आर्ग एक सकारात्मक मूल्य होना चाहिए।
पॉव ( एक्स, वाई )
के मूल्य की गणना करता है एक्स सत्ता में उठाया y । अगर एक्स नकारात्मक है, y एक पूर्णांक मान होना चाहिए।
रैंड ()
एक फ्लोटिंग पॉइंट नंबर शून्य से एक से कम या गणितीय शब्दों में, सीमा 0,1) देता है। बीज मशीन की आंतरिक घड़ी से आता है या एसआरएंड फ़ंक्शन के साथ मैनुअल सेट किया जा सकता है।
गोल( आर्ग )
अगर आर्ग एक पूर्णांक मूल्य है, रिटर्न आर्ग , अन्यथा बदलता है आर्ग गोल करके पूर्णांक करने के लिए और परिवर्तित मूल्य लौटाता है।
पाप ( आर्ग )
की साइन देता है आर्ग , रेडियंस में मापा जाता है।
सिंह ( आर्ग )
हाइपरबॉलिक साइन का लौटाता है आर्ग । अगर परिणाम ओवरफ्लो का कारण बनता है, तो एक त्रुटि लौटा दी जाती है।
sqrt ( आर्ग )
वर्ग वर्ग की वापसी करता है आर्ग . आर्ग गैर-नकारात्मक होना चाहिए।
srand ( आर्ग )
आर्ग , जो एक पूर्णांक होना चाहिए, यादृच्छिक संख्या जनरेटर के लिए बीज को रीसेट करने के लिए प्रयोग किया जाता है। उस बीज से पहला यादृच्छिक संख्या देता है। प्रत्येक दुभाषिया का अपना बीज होता है।
तन ( आर्ग )
के स्पर्शरेखा देता है आर्ग , रेडियंस में मापा जाता है।
tanh ( आर्ग )
के हाइपरबॉलिक टेंगेंट देता है आर्ग .
इन पूर्वनिर्धारित कार्यों के अतिरिक्त, अनुप्रयोगों का उपयोग करके अतिरिक्त कार्यों को परिभाषित कर सकते हैंTcl_CreateMathFunc().
प्रकार, ओवरफ्लो, और प्रेसिजन
पूर्णांक से जुड़े सभी आंतरिक गणना सी प्रकार के साथ की जाती हैं लंबा , और फ्लोटिंग-पॉइंट से जुड़े सभी आंतरिक कंप्यूटेशंस सी प्रकार के साथ किए जाते हैं दोहरा । एक स्ट्रिंग को फ़्लोटिंग-पॉइंट में कनवर्ट करते समय, एक्सपोनेंट ओवरफ़्लो का पता लगाया जाता है और परिणामस्वरूप टीसीएल त्रुटि होती है। स्ट्रिंग से पूर्णांक में रूपांतरण के लिए, ओवरफ्लो का पता लगाने स्थानीय सी पुस्तकालय में कुछ दिनचर्या के व्यवहार पर निर्भर करता है, इसलिए इसे अविश्वसनीय माना जाना चाहिए। किसी भी मामले में, इंटरमीडिएट परिणामों के लिए आमतौर पर पूर्णांक ओवरफ़्लो और अंडरफ्लो विश्वसनीय रूप से नहीं पहचाना जाता है। फ़्लोटिंग-पॉइंट ओवरफ्लो और अंडरफ्लो हार्डवेयर द्वारा समर्थित डिग्री के लिए पता चला है, जो आम तौर पर काफी विश्वसनीय है।
पूर्णांक, फ़्लोटिंग-पॉइंट, और स्ट्रिंग ऑपरेंड के लिए आंतरिक प्रस्तुतियों के बीच रूपांतरण स्वचालित रूप से आवश्यकतानुसार किया जाता है। अंकगणितीय गणना के लिए, पूर्णांक का उपयोग तब तक किया जाता है जब तक कि कुछ फ़्लोटिंग-पॉइंट नंबर पेश नहीं किया जाता है, जिसके बाद फ़्लोटिंग-पॉइंट का उपयोग किया जाता है। उदाहरण के लिए,
expr 5/4
1 देता है, जबकि
expr 5 / 4.0 expr 5 / (स्ट्रिंग लंबाई "abcd" + 0.0)
दोनों 1.25 लौटते हैं। फ़्लोटिंग-पॉइंट मान हमेशा `` के साथ वापस आते हैं.'' या एकई ताकि वे पूर्णांक मानों की तरह दिखाई न दें। उदाहरण के लिए,
एक्सपीआर 20.0 / 5.0
रिटर्न4.0, नहीं4.
स्ट्रिंग ऑपरेशंस
स्ट्रिंग मानों को तुलना ऑपरेटर के संचालन के रूप में उपयोग किया जा सकता है, हालांकि अभिव्यक्ति मूल्यांकनकर्ता तुलना करने के लिए पूर्णांक या फ़्लोटिंग-पॉइंट के रूप में तुलना करने की कोशिश करता है। यदि तुलना के संचालन में से एक स्ट्रिंग एक स्ट्रिंग है और दूसरे के पास संख्यात्मक मान है, तो संख्यात्मक ऑपरेंड को सी का उपयोग करके एक स्ट्रिंग में परिवर्तित कर दिया जाता है sprintf प्रारूप विनिर्देशक% d पूर्णांक के लिए और% छ फ्लोटिंग-पॉइंट मानों के लिए। उदाहरण के लिए, आदेश
expr {"0x03"> "2"} expr {"0y" <"0x12"}
दोनों वापसी 1. पहली तुलना पूर्णांक तुलना का उपयोग करके की जाती है, और दूसरे ऑपरेंड स्ट्रिंग में परिवर्तित होने के बाद स्ट्रिंग तुलना का उपयोग करके दूसरा किया जाता है18। जब भी संभव हो, मूल्यों के रूप में मानों के इलाज के लिए टीसीएल की प्रवृत्ति की वजह से ऑपरेटरों का उपयोग करना आम तौर पर एक अच्छा विचार नहीं है==जब आप वास्तव में स्ट्रिंग तुलना चाहते हैं और ऑपरेटरों के मान मनमाने ढंग से हो सकते हैं; इन मामलों में उपयोग करना बेहतर हैतार इसके बजाय कमांड।
प्रदर्शन विचार
सर्वोत्तम गति और सबसे छोटी भंडारण आवश्यकताओं के लिए ब्रेसिज़ में अभिव्यक्तियां संलग्न करें। यह टीसीएल बाइटकोड संकलक को सर्वोत्तम कोड उत्पन्न करने की अनुमति देता है।
जैसा ऊपर बताया गया है, अभिव्यक्तियों को दो बार प्रतिस्थापित किया जाता है: एक बार टीसीएल पार्सर द्वारा और एक बार expr आदेश। उदाहरण के लिए, आदेश
एक सेट 3 सेट बी {$ ए + 2} expr $ बी * 4
11 लौटें, 4 में से एकाधिक नहीं। ऐसा इसलिए है क्योंकि टीसीएल पार्सर पहले विकल्प लेगा$ ए + 2 परिवर्तनीय के लिएख, फिरexpr आदेश अभिव्यक्ति का मूल्यांकन करेगा$ ए + 2 * 4.
अधिकांश अभिव्यक्तियों को प्रतिस्थापन के दूसरे दौर की आवश्यकता नहीं होती है। या तो वे ब्रेसिज़ में संलग्न हैं या, यदि नहीं, तो उनके चर और कमांड प्रतिस्थापन संख्या या स्ट्रिंग उत्पन्न करते हैं जिन्हें स्वयं को प्रतिस्थापन की आवश्यकता नहीं होती है। हालांकि, क्योंकि कुछ अनब्रेस्ड अभिव्यक्तियों को प्रतिस्थापन के दो राउंड की आवश्यकता होती है, बाइटकोड कंपाइलर को इस स्थिति को संभालने के लिए अतिरिक्त निर्देशों को उत्सर्जित करना होगा। सबसे महंगा कोड असंबद्ध अभिव्यक्तियों के लिए आवश्यक है जिसमें कमांड प्रतिस्थापन होते हैं। अभिव्यक्ति निष्पादित होने पर हर बार नए कोड उत्पन्न करके ये अभिव्यक्ति लागू की जानी चाहिए।
कीवर्ड
अंकगणित, बुलियन, तुलना, अभिव्यक्ति, अस्पष्ट तुलना
जरूरी: उपयोग आदमी आदेश ( % आदमी ) यह देखने के लिए कि आपके विशेष कंप्यूटर पर कमांड का उपयोग कैसे किया जाता है।




