Linux / Unix Каманда: выказваючы

імя

выказваючы - Ацаніць выраз

канспект

выказваючы аргумент? Arg Arg ...?

Счапляюцца Arg «ы (даданне падзельніка прасторы паміж імі), ацэньвае вынік як выраз Tcl, і вяртае значэнне. Аператары, дазволеныя ў выразах Tcl з'яўляюцца падмноствам аператараў, дазволеных у выразах С, і яны маюць тое ж значэнне і прыярытэт, што і адпаведныя аператары C. Выразы амаль заўсёды даюць лікавыя вынікі (цэлае або з якая плавае кропкай значэння). Так, напрыклад, выраз

выказваючы 8,2 + 6

ацэньваецца ў 14.2. Tcl выразы адрозніваюцца ад выразаў C у спосабе, якім зададзены аперанды. Акрамя таго, Tcl выразы падтрымкі нечисловые аперанды і параўнанне радкоў.

аперанды

Выраз Tcl складаецца з камбінацыі аперанд, аператараў і дужак. Белае прастору можа выкарыстоўвацца паміж аперанда і аператарамі і дужкамі; яна ігнаруе інструкцыі выразы. Там, дзе гэта магчыма, аперанды інтэрпрэтуюцца як цэлыя значэння. Цэлыя значэння могуць быць паказаны ў дзесятковай (звычайны выпадак), у васьмярковым (калі першы сімвал аперанда роўна 0), або ў шаснаццатковым (калі першыя два знака аперанда 0x). Калі аперанд не мае адзін з цэлалікавых фарматаў, названых вышэй, то ён разглядаецца як лік з якая плавае кропкай, калі гэта магчыма. Колькасці з якая плавае кропкай могуць быць вызначаны ў любым са спосабаў , прынятых у ANSI-сумяшчальны C кампілятар ( за выключэннем таго, што F, F, L, і L суфіксы не будзе дазволена ў большасці установак). Напрыклад, усе з пералічаных ніжэй сапраўдных лікаў з якая плавае кропкай: 2.1, 3., 6e4, 7.91e + 16. Калі ні адна лічбавая інтэрпрэтацыя не магчыма, то аперанд застаецца ў выглядзе радка (і толькі абмежаваны набор аператараў могуць быць ужытыя да яго).

Аперанды могуць быць паказаны ў любым з наступных спосабаў:

[1]

У якасці лічбавага значэння, альбо цэлае або з якая плавае кропкай.

[2]

У якасці зменнай Tcl, выкарыстоўваючы стандартныя $ абазначэння. Значэнне зменнай будзе выкарыстоўвацца ў якасці аперанда.

[3]

У якасці радкі, заключанай ў двукоссе. Выраз аналізатар будзе выконваць зваротны слэш, зменных і каманд замен на інфармацыю паміж двукоссі, і выкарыстоўваць атрыманае значэнне ў якасці аперанда

[4]

У якасці радкі, складзенай у дужкі. Сімвалы паміж адкрывалай фігурнай дужкі і сопрягая зачыняе фігурную дужку будзе выкарыстоўвацца ў якасці аперанда без якіх-небудзь замен.

[5]

У якасці каманды Tcl ў квадратных дужках. Каманда будзе выканана і яе вынік будзе выкарыстоўвацца ў якасці аперанда.

[6]

У якасці матэматычнай функцыі, аргументы якой ёсць якія - небудзь з пералічаных вышэй формаў для аперанд, такія як грэх ($ х). Ніжэй прыведзены спіс пэўных функцый.

Дзе замены адбываюцца вышэй (напрыклад, у двукоссі), яны выконваюцца па ўказанні выразы. Тым не менш, дадатковы пласт замяшчэння, магчыма, ужо быў выкананы з дапамогай каманды сінтаксічнага аналізу, перш чым працэсар выразы называецца. Як апісана ніжэй, як правіла, лепш укласці выразы ў фігурных дужках, каб прадухіліць каманды парсер ад выканання замен на ўтрыманне.

Некаторыя прыклады простых выразаў, выкажам здагадку , што пераменная а мае значэнне 3 , а зменная Ь мае значэнне 6. Затым каманды на левым баку кожнай з радкоў ніжэй будзе вырабляць значэнне на правай баку лініі:

выраз 3.1 + $ A6.1 выраз 2 + "$ а. $ б" 5.6 выраз 4 * [llength "6 2"] 8 выраз {{слова адзін} < "слова $ а"} 0

аператары

Дзейсныя аператары пералічаныя ніжэй, згрупаваныя ў парадку змяншэння прыярытэту:

- + ~!

Адзінарны мінус, унарный плюс, пабітавае NOT, лагічнае НЕ. Ні адзін з гэтых аперанд не могуць быць ужытыя да радковых аперанд, і пабітавае НЕ можа быць прыменена толькі да цэлых лікаў.

* /%

Множанне, дзяленне, рэшта. Ні адзін з гэтых аперанд не могуць быць ужытыя да радковых аперанд, а астатняя частка можа быць прыменена толькі да цэлых лікаў. Рэшту заўсёды будзе мець той жа знак, дзельнік і абсалютная значэнне, меншае, чым дзельнік.

+ -

Складанне і адніманне. Сапраўды для любых лікавых аперанд.

<< >>

Левы і правы зрух. Сапраўды толькі для цэлалікавых аперанд. Правы зрух заўсёды распаўсюджваецца знакавы біт.

<> <=> =

Лагічнае менш, больш, менш або роўна, больш чым або роўна. Кожны аператар вырабляе 1, калі ўмова праўдзіва, 0 у адваротным выпадку. Гэтыя аператары могуць быць ужытыя да радках, а таксама лічбавым аперанда, у якіх выкарыстоўваюцца параўнанне выпадку радка.

==! =

Лагічнае роўныя і не роўныя. Кожны аператар вырабляе нуль / адзін вынік. Сапраўды для ўсіх тыпаў аперанд.

&

Двайковае І. Сапраўды толькі для цэлалікавых аперанд.

^

Пабітавае якое выключае АБО. Сапраўды толькі для цэлалікавых аперанд.

|

Пабітавае АБО. Сапраўды толькі для цэлалікавых аперанд.

&&

Лагічнае. Вырабляе 1 вынік, калі абодва аперанда не роўныя нулю, 0 у адваротным выпадку. Сапраўды для лагічнага значэння і лікавыя (цэлыя або з якая плавае кропкай) аперанды толькі.

||

Лагічнае АБО. Вырабляе 0 вынік, калі абодва аперанда роўныя нулю, 1 у адваротным выпадку. Сапраўды для лагічнага значэння і лікавыя (цэлыя або з якая плавае кропкай) аперанды толькі.

х? у: г

Калі-то-інакш, як у С. калі х прымае значэнне не роўна нулю, то вынікам будзе значэнне у. У адваротным выпадку, вынік з'яўляецца значэннем г. Х аперанд павінен мець лікавае значэнне.

Глядзіце кіраўніцтва C для атрымання больш падрабязнай інфармацыі аб выніках, атрыманых кожным аператарам. Усё з бінарных аператараў групы злева направа ў межах аднаго ўзроўню прыярытэту. Напрыклад, каманда

выраз 4 * 2 <7

вяртае 0.

&&, || І: аператары `` гультаяватыя вылічэнні «», гэтак жа , як і ў C, што азначае , што аперанды ня вылічаецца , калі яны не патрэбныя , каб вызначыць зыход. Напрыклад, у камандзе

выраз {$ v? [А]: [Ь]}

толькі адзін з [а] або [Ь] на самай справе будзе ацэньвацца, у залежнасці ад велічыні $ V. Аднак варта адзначыць, што гэта толькі справядліва, калі ўсё выраз складзена ў фігурных дужках; у адваротным выпадку, аналізатар Tcl будзе ацаніць як [а] і [б] перад выклікам каманды ехрга.

матэматычныя функцыі

Tcl падтрымлівае наступныя матэматычныя функцыі ў выразах:

АБС часопіс сЬ SQRT ЭКОС двайны log10 srand ASIN ехр Паў загар Атан падлогу рэнд TANH atan2 Fmod круглы CEIL hypot грэх соз Int ЗП

АБС (Arg)

Вяртае абсалютнае значэнне Арг. Арг можа быць альбо цэлым або з якая плавае кропкай, а вынік вяртаецца ў тым жа выглядзе.

ЭКОС (Arg)

Вяртае арккосінуса Arg, у дыяпазоне [0, р] радыянах. Арг павінен быць у дыяпазоне [-1,1].

ASIN (Arg)

Вяртае арксінуса Arg, у дыяпазоне [-pi / 2, пі / 2 радыян]. Арг павінен быць у дыяпазоне [-1,1].

Atan (Arg)

Вяртае арктангенс Arg, у дыяпазоне [-pi / 2, пі / 2 радыян].

atan2 (х, у)

Вяртае арктангенс / х, у дыяпазоне [-pi, пі] радыян у. х і ў не могуць быць абодва 0.

CEIL (Arg)

Вяртае найменшае цэлае значэнне не менш Арг.

сов (Arg)

Вяртае косінус аргументу ў радыянах.

сп (Arg)

Вяртае гіпербалічны косінус аргументу. Калі вынік будзе выклікаць перапаўненне, то вяртаецца памылка.

падвойная (Arg)

Калі аргумент з'яўляецца плывучым значэннем, вяртае аргумент, у адваротным выпадку пераўтворыць аргумент на плавае і вяртае ператворанае значэнне.

ехр (Arg)

Вяртае экспаненту Арг, вызначаны як е ** Арг. Калі вынік будзе выклікаць перапаўненне, то вяртаецца памылка.

паверх (Arg)

Вяртае найбольшую цэлае значэнне не большае , чым Арг.

FMOD (х, у)

Вяртае плавае кропкай рэшта ад дзялення х на у. Калі ў роўны 0, то вяртаецца памылка.

hypot (х, у)

Вылічыць даўжыню гіпатэнузы прамавугольнага трохвугольніка * х + у * у).

Int (Arg)

Калі аргумент ўяўляе сабой цэлае значэнне, вяртае аргумент, у адваротным выпадку пераўтворыць аргумент на цэлае шляхам ўсячэння і вяртае ператворанае значэнне.

увайсці (Arg)

Вяртае натуральны лагарыфм Арг. Arg павінна быць дадатнае значэнне.

log10 (Arg)

Вяртае падставу 10 лагарыфм Арг. Arg павінна быць дадатнае значэнне.

Паў (х, у)

Вылічае значэнне х , узведзены ў ступень у. Калі х мае адмоўнае значэнне , у павінны быць цэлым лікам.

Rand ()

Вяртае лік з якая плавае кропкай ад нуля да крыху менш за адзін або, у матэматычных тэрмінах, дыяпазон [0,1). Насеньне адбываецца ад унутраных гадзін машыны або можа быць усталяваны ручной з функцыяй srand.

круглы (Arg)

Калі аргумент ўяўляе сабой цэлае значэнне, вяртае аргумент, у адваротным выпадку пераўтворыць аргумент на цэлы лік шляхам акруглення і вяртае ператворанае значэнне.

Sin (Arg)

Вяртае сінус аргументу ў радыянах.

ЗП (Arg)

Вяртае гіпербалічны сінус аргументу. Калі вынік будзе выклікаць перапаўненне, то вяртаецца памылка.

SQRT (Arg)

Вяртае квадратны корань Арг. Arg павінны быць неадмоўнага.

srand (Arg)

Arg, які павінен быць цэлым лікам, выкарыстоўваецца для скіду насення для генератара выпадковых лікаў. Вяртае першае выпадковы лік з гэтага насення. Кожны перакладчык мае сваё ўласнае насеньне.

тангенс (Arg)

Вяртае тангенс ARG, вымераны ў радыянах.

TANH (Arg)

Вяртае гіпербалічны тангенс параметру.

У дадатку да гэтых перадвызначаным функцый, прыкладання могуць вызначаць дадатковыя функцыі , выкарыстоўваючы Tcl_CreateMathFunc ().

Тыпы, пераліў, і дакладнасць

Усе ўнутраныя разлікі з удзелам цэлых лікаў выконваюцца з тыпам C доўга, і ўсе ўнутраныя вылічэнні , звязаныя з якая плавае коскі выконваюцца з тыпам C падвойным. Пры пераўтварэнні радкі ў плавае кропку, перапаўненне паказчыка выяўляецца, і прыводзіць да памылкі Tcl. Для пераўтварэнні ў цэлым колькасць ад радка, выяўленне перапаўнення залежыць ад паводзінаў некаторых працэдур у мясцовай бібліятэцы C, таму яе варта разглядаць як ненадзейныя. У любым выпадку, лік перапаўненне і страта значнасць, як правіла, не можа быць надзейна выяўленыя для прамежкавых вынікаў. Перапаўненне з якая плавае кропкай і згушчанага выяўляюцца ў той ступені, падтрымоўваных апаратнымі сродкамі, які, як правіла, даволі надзейныя.

Пераўтварэнне сярод ўнутраных уяўленняў для цэлага ліку з якая плавае кропкай і радковыя аперанды выконваецца аўтаматычна па меры неабходнасці. Для арыфметычных вылічэнняў, цэлыя лікі выкарыстоўваюцца да тых часоў, некаторы лік з якая плавае кропкай не ўводзяцца, пасля чаго выкарыстоўваецца з якая плавае кропкай. Напрыклад,

выраз 5/4

вяртае 1, у той час як

выраз 5 / 4,0 выраз 5 / ([даўжыня радка "ABCD"] + 0.0)

абодва вяртаюць 1.25. Значэння з якая плавае коскі, заўсёды вяртаюцца з ``. «» Або е так , што яны не будуць выглядаць як цэлыя значэння. Напрыклад,

выраз 20.0 / 5.0

вяртае 4,0, а не 4.

Аперацыі з радкамі

Радковыя значэння могуць быць выкарыстаны ў якасці аперанд аператараў параўнання, хоць выраз ацэншчык спрабуе зрабіць параўнанне як цэлае або з якая плавае кропкай, калі гэта магчыма. Калі адзін з аперанд параўнання з'яўляецца радком , а другі мае лікавае значэнне, лікавы аперанд пераўтворыцца зваротна ў радок , выкарыстоўваючы З Sprintf спецификатор фармату% D для цэлых лікаў і% г для значэнняў з якая плавае кропкай. Напрыклад, каманды

выраз { "0x03"> "2"} {выраз "0y" < "0x12"}

абодва вяртаюць 1. Першае параўнанне ажыццяўляецца з дапамогай цэлага ліку параўнання, а другі ажыццяўляецца з дапамогай параўнання радкоў пасля другой аперанд пераўтворыцца ў радок 18. З - за тэндэнцыі Tcl да ставіцца значэння як лікі , калі гэта магчыма, як правіла , не з'яўляецца добрай ідэяй выкарыстоўваць аператары , як == калі вы сапраўды хочаце параўнанне радкоў і значэнняў аперанд можа быць адвольным; гэта лепш у гэтых выпадках выкарыстоўваць камандны радок замест.

пытанні прадукцыйнасці

Пастанавеце выразы ў фігурных дужках для лепшай хуткасці і найменшых патрабаванняў да захоўвання. Гэта дазваляе байткод кампілятар Tcl для стварэння лепшага кода.

Як ужо згадвалася вышэй, выразы замяняюцца двойчы: адзін раз аналізатарам Tcl і адзін раз з дапамогай каманды ехрг. Напрыклад, каманды

ўсталяваць 3 мноства {Ь $ а + 2} знач $ б * 4

вярнуцца 11, ня кратна 4. Гэта адбываецца таму , што сінтаксічны аналізатар Tcl спачатку заменіць $ а + 2 для зменнай Ь, то каманда выраз будзе ацэньваць выраз $ а + 2 * 4.

Большасць выразаў не патрабуе другога раўнда замяшчэнняў. Альбо яны заключаны ў дужкі або, калі няма, то іх зменных і каманд замен вярнуць ліку або радкі, якія самі па сабе не патрабуюць замены. Аднак, паколькі некалькі незамацаваных выразаў трэба два раўнда замены, байт-код кампілятар павінен выпраменьваць дадатковыя інструкцыі для апрацоўкі гэтай сітуацыі. Самы дарагі код неабходны для незамацаваных выразаў, якія ўтрымліваюць каманды замен. Гэтыя выразы павінны быць рэалізаваны шляхам стварэння новага кода кожны раз, калі выраз выконваецца.

ключавыя словы

арыфметыка, лагічны , параўнанне, выраз, недакладнае параўнанне

Важна: Выкарыстоўвайце каманду чалавека (%) чалавек , каб паглядзець , як каманда выкарыстоўваецца на вашым канкрэтным кампутары.