فرمان لینوکس / یونیکس: expr

نام

expr - ارزیابی یک عبارت

خلاصه داستان

expr arg ؟ arg arg ... ؟

Concatenates arg 's (با افزودن فضاهای جداسازی بین آنها)، نتیجه را به صورت بیان Tcl ارزیابی می کند، و مقدار را برمی گرداند. اپراتورهای مجاز در اصطلاحات Tcl یک زیرمجموعه از اپراتورهای مجاز در عبارات C هستند و آنها به همان معنی و مقدم بودن به عنوان اپراتورهای مربوطه C عمل می کنند. عبارات تقریبا همیشه نتایج عددی (عدد صحیح یا مقادیر شناور) را تولید می کنند. به عنوان مثال، عبارت

expr 8.2 + 6

به 14.2 ارزیابی می شود. عبارات Tcl از عبارات C به نحوی که مشخصه operands هستند متفاوت است. همچنین، عبارات Tcl پشتیبانی از operands غیر عددی و مقایسه رشته.

اپراتورها

بیان Tcl شامل ترکیبی از operands، operators و پرانتز است. فضای سفید می تواند بین اپرات ها و اپراتورها و پرانتز استفاده شود؛ این دستورالعمل ها را نادیده می گیرد. در صورتی که عملیات ها به صورت مقادیر صحیح تفسیر شوند مقادیر عدد صحیح ممکن است در دهدهی (مورد عادی) مشخص شود، در هشتم (اگر اولین حرف عمق صفر است ) یا در شانزدهدهم (اگر دو عدد اول از عملگر صفر باشند). اگر یک اپندر یکی از فرمت های صحیح داده شده در بالا را نداشته باشد، در صورتی که امکان پذیر باشد، آن را به عنوان یک عدد شناور در نظر بگیرید. اعداد شناور در هر کدام از روش های پذیرفته شده توسط یک کامپایلر C سازگار با ANSI (به جز اینکه پسوند های F ، F ، L و L در اکثر تاسیسات مجاز نخواهد بود) مشخص می شود. به عنوان مثال، تمام زیر از اعداد شناور معتبر استفاده می شود: 2.1، 3.، 6e4، 7.91e + 16. اگر تفسیر عددی امکان پذیر نباشد، یک عملگر به عنوان یک رشته باقی می ماند (و فقط مجموعه محدودی از اپراتورها ممکن است به آن اعمال شود).

اپراتورها ممکن است در هر یک از موارد زیر مشخص شوند:

[1]

به عنوان یک مقدار عددی، یا عدد صحیح یا نقطه شناور.

[2]

به عنوان یک متغیر Tcl، با استفاده از نماد استاندارد $ . مقدار متغیر به عنوان عملگر استفاده می شود.

[3]

به عنوان یک رشته محصور در دو نقل قول. تجزیه کننده عبارت، جایگزین های backslash، متغیر و فرمان را بر روی اطلاعات بین نقل قول ها انجام می دهد و از مقدار حاصل از آن به عنوان عملگر استفاده می شود

[4]

به عنوان یک رشته محصور در braces کاراکترهای بین پرانتز باز و تطبیق بستگی نزدیک به عنوان عملگر بدون هیچ گونه جایگزینی استفاده می شود.

[5]

به عنوان یک فرمان Tcl محصور شده در براکت. فرمان اجرا می شود و نتیجه آن به عنوان عملگر مورد استفاده قرار می گیرد.

[6]

به عنوان یک تابع ریاضی که استدلال هر یک از فرم های فوق برای operands، مانند گناه ($ x) . برای فهرستی از توابع تعریف شده زیر را ببینید.

جایی که جایگزینی در بالا رخ می دهد (به عنوان مثال در داخل رشته های نقل قول)، آنها با دستورات بیان انجام می شوند. با این حال، قبل از اینکه نام پردازنده بیان شود، لایه اضافی جایگزینی ممکن است توسط پارس كن كنترل اجرا شود. همانطور که در زیر بحث شده است، معمولا بهتر است که عبارات را در braces قرار دهیم تا مانع فرماندهی فرمان از انجام جایگزینی در محتویات شود.

برای برخی از مثالهای عبارات ساده فرض کنید متغیر a دارای مقدار 3 است و متغیر b دارای مقدار 6 است. سپس دستور در سمت چپ هر یک از خطوط زیر مقدار در سمت راست خط را تولید می کند:

expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * [طول "6 2"] 8 expr {{word one} <"word $ a"} 0

اپراتورها

اپراتورهای معتبر در زیر لیست شده اند که به ترتیب تقلیل تقدم تقسیم می شوند:

- + ~!

مناری مناریو، به طور غیر معمول، بیت عاقل نه، منطقی نیست. هیچ کدام از این operands ها ممکن است به operands string اعمال شود، و بیتی عاقل نه تنها برای عدد صحیح اعمال می شود.

* /٪

ضرب، تقسیم، باقی مانده. هیچ کدام از این operands ها ممکن است به operands string اعمال شود، و باقی مانده ممکن است فقط به اعداد صحیح اعمال شود. باقی مانده همیشه علامت مشابهی را به عنوان تقسیم کننده و یک مقدار مطلق کوچکتر از تقسیم کننده خواهد داشت.

+ -

اضافه کردن و تفریق برای هر عملیاتی عددی معتبر است

<< >>

تغییر چپ و راست. فقط برای operands integer معتبر است یک حرکت راست همیشه علامت بیت را پخش می کند.

<> <=> =

Boolean کمتر، بیشتر، کمتر یا برابر و بزرگتر یا برابر است. هر اپراتور تولید 1 اگر شرایط درست باشد، 0 در غیر این صورت. این اپراتورها ممکن است به رشته ها و همچنین operands عددی اعمال شود، در این صورت مقایسه رشته مورد استفاده قرار می گیرد.

==! =

بولین برابر و برابر نیست. هر اپراتور یک نتیجه صفر / یک را تولید می کند. معتبر برای تمام انواع اپندر.

&

بیت عاقل و فقط برای operands integer معتبر است

^

بی عیب و نقص OR. فقط برای operands integer معتبر است

|

عاقلانه OR. فقط برای operands integer معتبر است

&&

منطقی و در صورتی که هر دو اپندر غیر صفر باشند، 0 نتیجه 1 را تولید می کند، در غیر این صورت 0 نتیجه می گیرد. Valid برای Boolean و عددی (اعداد صحیح یا نقطه شناور) فقط operands.

||

منطقی OR. اگر هر دو operands صفر باشند، 1 در غیر این صورت، نتیجه 0 را تولید می کند. Valid برای Boolean و عددی (اعداد صحیح یا نقطه شناور) فقط operands.

x y : z

اگر بعد دیگری، همانطور که در C. اگر x به غیر صفر ارزیابی شود، نتیجه نتیجه مقدار y است . در غیر این صورت، نتیجه z مقدار است. اعداد x باید مقدار عددی داشته باشند.

برای اطلاعات بیشتر در مورد نتایج هر اپراتور، به راهنمای C مراجعه کنید. تمام گروه اپراتورهای دودویی به سمت راست در همان سطح پیشین قرار دارند. به عنوان مثال، دستور

expr 4 * 2 <7

بازگشت 0

&& ، || ، و؟: اپراتورها '`ارزیابی تنبل' '، درست همانطور که در C است، به این معنی است که اپرانها ارزیابی نمی شوند اگر برای تعیین نتیجه مورد نیاز نیستند. به عنوان مثال، در فرمان

expr {$ v؟ [a]: [b]}

بسته به ارزش $ v، تنها یک مورد از [a] یا [b] ارزیابی خواهد شد. توجه داشته باشید، با این حال، این تنها در صورتی است که کل عبارت در braces محصور شده باشد؛ در غیر این صورت، تجزیه کننده Tcl هر دو [a] و [b] را قبل از فراخوانی دستور expr ارزیابی می کند .

توابع ریاضی

Tcl از توابع ریاضی زیر در عبارات پشتیبانی می کند:

abs cosh log sqrt acos double log10 srand asin exp pow tan atan floor rand tanh atan2 fmod دور ceil hypot گنجه cos int sinh

abs ( arg )

مقدار مطلق arg را به دست می آورد . ارگ ممکن است یا عدد صحیح یا نقطه شناور باشد و نتیجه در همان شکل برگشت داده می شود.

acos ( arg )

کازینوس قوس arg را در محدوده [0، pi] رادیان بازمیگرداند. ارگ باید در محدوده باشد [-1،1].

asin ( arg )

سینوس قوس arg را در محدوده [-pi / 2، pi / 2] رادیان به دست می آورد. ارگ باید در محدوده باشد [-1،1].

اتان ( arg )

تنگستن قوس arg را را در محدوده [-pi / 2، pi / 2] رادیان بازمیگرداند.

atan2 ( x، y )

تانژانت قوس y / x را در محدوده [-pi، pi] محدوده می دهد. x و y نمی توانند هر دو باشند 0.

ceil ( arg )

کوچکترین مقدار عدد صحیح را کمتر از arg را می دهد .

coc ( arg )

کوزینس انسداد را که در رادیان اندازه گیری می شود، باز می گرداند.

کوش ( arg )

کسینوس هیپربولیک arg را باز می گرداند. اگر نتیجه یک سرریز را ایجاد کند، یک خطا بازگردانده می شود.

دوگانه ( arg )

اگر arg یک مقدار شناور است، arg را باز می کند، در غیر اینصورت، arg به swloating تبدیل می شود و مقدار تبدیل شده را به دست می گیرد.

exp ( arg )

نمادگرایی arg را باز میگرداند ، به عنوان e ** arg را تعریف می شود. اگر نتیجه یک سرریز را ایجاد کند، یک خطا بازگردانده می شود.

طبقه ( arg )

بزرگترین مقدار یکپارچگی را که بیشتر از arg است را برمی گرداند.

fmod ( x، y )

باقی مانده از نقطه تقسیم x با y را بازگشت می دهد . اگر y برابر 0 است، یک خطا برگشت می شود.

hypot ( x، y )

طول قطر یک مثلث راست زاویه ( x * x + y * y ) را محاسبه می کند.

int ( arg )

اگر arg یک مقدار عدد صحیح است، arg را باز می کند، در غیر اینصورت، با استفاده از truncation arg را به عدد صحیح تبدیل می کند و مقدار تبدیل می شود.

log ( arg )

لگاریتم طبیعی arg را برمی گرداند. Arg باید یک مقدار مثبت باشد.

log10 ( arg )

پایه 10 لگاریتم arg را می پردازد. Arg باید یک مقدار مثبت باشد.

pow ( x، y )

ارزش X را به قدرت Y محاسبه می کند . اگر x منفی باشد، y باید یک مقدار عدد صحیح باشد.

رند ()

تعداد عدد شناور را از صفر تا فقط کمتر از یک یا، در ریاضیات، محدوده [0،1] می گیرد. بذر از ساعت داخلی دستگاه می آید و یا ممکن است کتابچه راهنمای کاربر با عملکرد srand تنظیم شود.

دور ( arg )

اگر arg یک مقدار عدد صحیح است، arg arg را باز می کند، در غیر این صورت، با استفاده از گرد کردن به اعداد صحیح تبدیل می شود و مقدار تبدیل می شود.

گناه ( arg )

سینوس آرگون را که در رادیان اندازه گیری شده است، می گیرد.

سین ( آرگو )

سینوسی هیپربولیک arg را برمی گرداند. اگر نتیجه یک سرریز را ایجاد کند، یک خطا بازگردانده می شود.

sqrt ( arg )

ریشه مربع arg را باز می گرداند. Arg باید غیر منفی باشد.

srand ( arg )

آرژانتین ، که باید یک عدد صحیح باشد، برای تنظیم مجدد دانه برای مولد عدد تصادفی استفاده می شود. اولین عدد تصادفی از آن دانه را برمی گرداند. هر مترجم بذر خود را دارد.

قهوهای مایل به زرد

تکانه ای از اهرمی را که در رادیان اندازه گیری می شود، باز می گرداند.

tanh ( arg )

تنگستن هذلولی اهرم را بازمیگرداند.

علاوه بر این توابع از پیش تعریف شده، برنامه های کاربردی می توانند توابع اضافی را با استفاده از Tcl_CreateMathFunc () تعریف کنند.

انواع، سرریز، و دقت

تمام محاسبات داخلی شامل اعداد صحیح با طول نوع C انجام می شود و تمام محاسبات داخلی شامل نقطه شناور با دو نوع C انجام می شود. هنگام تبدیل یک رشته به نقطه شناور، سرریز نماینده شناسایی می شود و به یک خطای Tcl منجر می شود. برای تبدیل به عدد صحیح از رشته، تشخیص سرریز بستگی به رفتار برخی از روال ها در کتابخانه محلی C دارد، بنابراین باید آن را غیر قابل اعتماد دانست. در هر صورت، سرریز عدد صحیح و جریان زیر جریان به طور کلی برای نتایج متوسط ​​اطمینان پیدا نمی شود. سرریز و تخلیه نقطه شناور به درجه پشتیبانی سخت افزاری تشخیص داده می شود، که عموما بسیار قابل اعتماد است.

تبدیل در بین نمایندگی های داخلی برای عدد صحیح، نقطه شناور و عملگرهای رشته به صورت خودکار در صورت نیاز انجام می شود. برای محاسبات محاسباتی، عدد صحیح تا زمانی که تعدادی از عدد شناور معرفی شده است استفاده می شود، پس از آن نقطه شناور استفاده می شود. مثلا،

expr 5/4

بازده 1، در حالی که

expr 5 / 4.0 expr 5 / ([طول رشته "abcd"] + 0.0)

هر دو 1.25 بازگشت. مقادیر شناور نقطه همیشه با یک `` . '' و یا به طوری که آنها به نظر نمی آید مقادیر عدد صحیح. مثلا،

expr 20.0 / 5.0

بازده 4.0 ، نه 4 .

عملیات رشته

مقادیر رشته می تواند به عنوان اپندر اپراتورهای مقایسه استفاده شود، اگرچه ارزیابی بیان تلاش می کند تا زمانی که بتواند مقایسه ها را به عنوان عدد صحیح یا نقطه شناور انجام دهد. اگر یکی از operands یک مقایسه یک رشته است و دیگری دارای مقدار عددی است، عملگر عددی به یک رشته با استفاده از مشخص کننده فرمت C sprintf ٪ d برای عدد صحیح و ٪ g برای مقادیر شناور نقطه تبدیل می شود. به عنوان مثال، دستورات

expr {"0x03"> "2"} expr {"0y" <"0x12"}

هر دو مقدار 1. اول مقایسه با استفاده از مقایسه عدد صحیح انجام می شود، و دوم با استفاده از مقایسه رشته انجام می شود بعد از اینکه عملوند دوم به رشته 18 تبدیل می شود . از آنجا که تمایل Tcl برای درمان ارزش ها به عنوان اعداد در هر زمان ممکن است، به طور کلی ایده خوبی برای استفاده از اپراتورها مانند == هنگامی که شما واقعا می خواهید مقایسه رشته و مقادیر operands می تواند دلخواه باشد؛ بهتر است در این موارد از دستور رشته استفاده کنید.

ملاحظات عملکرد

عبارات را در braces برای بهترین سرعت و کوچکترین الزامات ذخیره سازی اضافه کنید. این اجازه می دهد تا کامپایلر بایت کد Tcl برای تولید بهترین کد.

همانطور که در بالا ذکر شد، عبارات دوبار جایگزین می شوند: یک بار توسط تجزیه کننده Tcl و یک بار توسط دستور expr . به عنوان مثال، دستورات

مجموعه 3 مجموعه b {$ a + 2} expr $ b * 4 را تنظیم کنید

بازگشت 11، چندگانه 4 نیست. دلیل این است که TLL تجزیه کننده برای اولین بار $ a + 2 را برای متغیر b جایگزین می کند، سپس دستور expr ، عبارت expression a a + 2 * 4 را ارزیابی می کند .

بیشتر عبارات دور دوم جایگزینی را نیاز ندارند. یا آنها در braces محصور شده اند و یا نه، جایگزینی متغیر و فرمان آنها، اعداد یا رشته هایی را تولید می کنند که خودشان نیازی به جایگزینی ندارند. با این حال، به دلیل اینکه چند عبارات غیرقابل تحرک نیاز به دو دور جایگزینی دارند، کامپایلر بایستی کد باید دستورالعمل های اضافی برای رسیدگی به این وضعیت را منتشر کند. گرامر گرامری برای عبارات unbraced که شامل تعویض فرمان هستند مورد نیاز است. این عبارات باید با ایجاد کد جدید هر بار که بیان اجرا می شود، اجرا شود.

کلید واژه ها

ریاضی، ریاضی، مقایسه، بیان، مقایسه فازی

مهم: از دستور man ( ٪ man ) برای دیدن نحوه استفاده از دستور در رایانه خاص خود استفاده کنید.