Pangalan
expr - Suriin ang isang expression
Buod
expr arg ? arg arg … ?
Concatenates arg 's (pagdaragdag ng mga puwang sa separator sa pagitan ng mga ito), sinusuri ang resulta bilang isang ekspresyon ng Tcl, at ibabalik ang halaga. Ang mga operator na pinahihintulutan sa mga ekspresyon ng Tcl ay isang subset ng mga operator na pinahintulutan sa mga ekspresyon ng C, at mayroon silang parehong kahulugan at pangunahan bilang mga kaukulang operator ng C. Ang mga expression ay halos palaging nagbubunga ng mga numerong resulta (integer o floating-point values). Halimbawa, ang pananalita
expr 8.2 + 6
sinusuri sa 14.2. Ang mga ekspresyong Tcl ay naiiba sa mga ekspresyon ng C sa paraan na tinukoy. Gayundin, ang mga expression ng Tcl ay sumusuporta sa mga di-numerong operand at paghahambing ng string.
Operands
Ang isang tcl expression ay binubuo ng isang kumbinasyon ng mga operands, mga operator, at mga panaklong. Maaaring gamitin ang puting espasyo sa pagitan ng mga operand at operator at mga panaklong; ito ay hindi pinansin ng mga tagubilin ng pagpapahayag. Kung posible, ang mga operasyon ay binibigyang kahulugan bilang mga halaga ng integer. Ang mga halaga ng integer ay maaaring tinukoy sa decimal (ang normal na kaso), sa octal (kung ang unang karakter ng operand ay0), o sa hexadecimal (kung ang unang dalawang character ng operand ay0x). Kung ang isang operand ay walang isa sa mga format ng integer na ibinigay sa itaas, pagkatapos ito ay itinuturing bilang isang lumulutang-point na numero kung iyon ay posible. Ang mga numero ng lumulutang na tuldok ay maaaring tinukoy sa alinman sa mga paraan na tinanggap ng isang compiler ng ANSI-compliant (maliban na lamang angf, F, l, atL Ang mga suffix ay hindi pahihintulutan sa karamihan sa mga pag-install). Halimbawa, ang lahat ng mga sumusunod ay wastong mga numero ng lumulutang na numero: 2.1, 3., 6e4, 7.91e + 16. Kung walang numeric interpretation ay posible, kung ang isang operand ay naiwan bilang isang string (at lamang ng isang limitadong hanay ng mga operator ay maaaring mailapat dito).
Ang mga operasyon ay maaaring tinukoy sa alinman sa mga sumusunod na paraan:
1
Bilang isang numerong halaga, alinman sa integer o lumulutang-point.
2
Bilang variable ng Tcl, gamit ang pamantayan$ notasyon. Ang halaga ng variable ay gagamitin bilang operand.
3
Bilang isang string na nakapaloob sa double-quotes. Ang ekspresyon ng parser ay gagawa ng backslash, variable, at command substitutions sa impormasyon sa pagitan ng mga quotes, at gamitin ang resultang halaga bilang operand
4
Bilang isang string na nakapaloob sa tirante. Ang mga character sa pagitan ng bukas na suhay at pagtutugma ng malapit na suhay ay gagamitin bilang operand nang walang anumang mga pamalit.
5
Bilang isang command na Tcl na nakapaloob sa mga braket. Ang utos ay isasagawa at ang resulta nito ay gagamitin bilang operand.
6
Bilang isang mathematical function na ang mga argumento ay may alinman sa mga form sa itaas para sa mga operand, tulad ngkasalanan ($ x). Tingnan sa ibaba para sa isang listahan ng mga tinukoy na function.
Kung saan ang mga pamalit ay nangyari sa itaas (hal. Sa loob ng mga string na naka-quote), ang mga ito ay ginagawa sa pamamagitan ng mga tagubilin ng pagpapahayag. Gayunpaman, ang isang karagdagang layer ng pagpapalit ay maaaring maisagawa na ng command parser bago ang tinatawag na processor ng expression. Tulad ng tinalakay sa ibaba, kadalasang pinakamahusay na isama ang mga expression sa mga tirante upang maiwasan ang command parser mula sa pagsasagawa ng mga pamalit sa mga nilalaman.
Para sa ilang mga halimbawa ng mga simpleng expression, ipagpalagay na ang variablea may halaga 3 at ang variablebMay halaga ang 6. Pagkatapos ang command sa kaliwang bahagi ng bawat linya sa ibaba ay bubuo ng halaga sa kanang bahagi ng linya:
expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * llength "6 2" 8 expr {{word one} <"word $ a"} 0
Mga operator
Ang mga may-bisang operator ay nakalista sa ibaba, na pinagsama sa nagpapababa ng pagkakasunud-sunod ng mga sumusunod:
- + ~ !
Unary minus, unary plus, bit-wise HINDI, lohikal na HINDI. Wala sa mga ito ang mga operasyon ay maaaring mailapat sa mga operand sa string, at ang bit-wise HINDI ay maaaring mailalapat lamang sa mga integer.
* / %
Multiply, hatiin, natira. Wala sa mga operand na ito ang maaaring mailapat sa mga operand ng string, at ang natitira ay maaaring mailalapat lamang sa mga integer. Ang natitira ay laging magkakaroon ng parehong tanda bilang panghati at isang lubos na halaga na mas maliit kaysa sa panghati.
+ -
Magdagdag at ibawas. Wasto para sa anumang mga numerong operand.
<< >>
Kaliwa at kanan shift. Wastong para sa integer ang nagpapatakbo lamang. Ang isang laging paglilipat ay laging nagpapalaganap ng bit sign.
< > <= >=
Ang Boolean ay mas mababa, mas malaki, mas mababa kaysa sa o pantay, at mas malaki kaysa o pantay. Ang bawat operator ay gumagawa ng 1 kung ang kondisyon ay totoo, kung hindi man. Ang mga operator ay maaaring ilapat sa mga string pati na rin ang mga numerong operand, kung saan ginagamit ang paghahambing ng string ng kaso.
== !=
Ang Boolean ay pantay at hindi katumbas. Ang bawat operator ay gumagawa ng isang zero / isang resulta. Wasto para sa lahat ng uri ng operand.
&
Bit-wise AND. Wastong para sa integer ang nagpapatakbo lamang.
^
Masyadong matalino eksklusibo O. Wastong para sa integer ang nagpapatakbo lamang.
|
Bit-wise OR. Wastong para sa integer ang nagpapatakbo lamang.
&&
Lohikal AT. Gumagawa ng isang 1 resulta kung ang parehong mga operand ay hindi zero, kung hindi man. Ang mga valid para sa boolean at numeric (integer o floating-point) ay nagpapatakbo lamang.
||
Lohikal O. Gumagawa ng 0 resulta kung ang parehong mga operand ay zero, kung hindi man. Ang mga valid para sa boolean at numeric (integer o floating-point) ay nagpapatakbo lamang.
x ? y : z
Kung-ibang-iba, tulad ng sa C. Kung x Sinusuri ang non-zero, pagkatapos ang resulta ay ang halaga ng y . Kung hindi man, ang resulta ay ang halaga ng z . Ang x Ang operand ay dapat may numerong halaga.
Tingnan ang manwal ng C para sa higit pang mga detalye sa mga resulta na ginawa ng bawat operator. Ang lahat ng mga grupo ng binary operator ay kaliwa-sa-kanan sa loob ng parehong antas ng precedence. Halimbawa, ang utos
expr 4 * 2 <7
babalik 0.
Ang&&, ||, at?: Ang mga operator ay may `` tamad na pagsusuri '', tulad ng sa C, na nangangahulugan na ang mga operand ay hindi sinusuri kung hindi sila kinakailangan upang matukoy ang kinalabasan. Halimbawa, sa utos
expr {$ v? a: b}
isa lamang saa ob ay talagang sinusuri, depende sa halaga ng$ v. Tandaan, gayunpaman, na ito ay totoo lamang kung ang buong pagpapahayag ay nakapaloob sa mga tirante; kung hindi, susuriin ng Tcl parser ang parehoa atb bago gamitin angexpr utos.
Mga Function ng Math
Sinusuportahan ng Tcl ang mga sumusunod na mga function ng matematika sa mga expression:
abs coshmag-logsqrt acos doublelog10srand tulad ng sa exppowkulay-balat atan sahigrandtanh atan2 fmodikot ceil hypotkasalanan cos intsinh
abs ( arg )
Ibinabalik ang absolute value ng arg . Arg maaaring alinman sa integer o lumulutang-point, at ang resulta ay ibinalik sa parehong form.
acos ( arg )
Ibinabalik ang arc cosine ng arg , sa saklaw 0, pi radians. Arg dapat na nasa hanay -1, 1.
tulad ng sa( arg )
Ibinabalik ang arc sine ng arg , sa range -pi / 2, pi / 2 radians. Arg dapat na nasa hanay -1, 1.
atan ( arg )
Ibinabalik ang arc tangent ng arg , sa range -pi / 2, pi / 2 radians.
atan2 ( x, y )
Ibinabalik ang arc tangent ng y / x , sa saklaw ng -pi, pi radians. x at y hindi pareho ang magiging 0.
ceil ( arg )
Ibinabalik ang pinakamaliit na halaga ng integer na hindi kukulangin sa arg .
cos ( arg )
Ibinabalik ang cosine ng arg , sinusukat sa radians.
cosh ( arg )
Ibinabalik ang hyperbolic cosine ng arg . Kung ang resulta ay magiging sanhi ng overflow, ang isang error ay ibinalik.
double ( arg )
Kung arg ay isang lumulutang na halaga, nagbabalik arg , kung hindi man ay nag-convert arg sa lumulutang at nagbabalik ng na-convert na halaga.
exp ( arg )
Ibinabalik ang pagpaparami ng arg , tinukoy bilang e ** arg . Kung ang resulta ay magiging sanhi ng overflow, ang isang error ay ibinalik.
sahig ( arg )
Ibinabalik ang pinakamalaking mahalagang halaga na hindi mas malaki kaysa sa arg .
fmod ( x, y )
Ibinabalik ang nalalabing-natitirang punto ng dibisyon ng x sa pamamagitan ng y . Kung y ay 0, ang isang error ay ibinalik.
hypot ( x, y )
Computes ang haba ng hypotenuse ng isang right-angled tatsulok ( x * x + y * y ).
int ( arg )
Kung arg ay isang halaga ng integer, nagbalik arg , kung hindi man ay nag-convert arg sa integer sa pamamagitan ng truncation at babalik ang na-convert na halaga.
log ( arg )
Ibinabalik ang likas na logarithm ng arg . Arg ay dapat na isang positibong halaga.
log10 ( arg )
Ibinabalik ang base 10 logarithm ng arg . Arg ay dapat na isang positibong halaga.
pow ( x, y )
Computes ang halaga ng x itataas sa kapangyarihan y . Kung x ay negatibo, y Dapat ay isang integer na halaga.
rand ()
Ibinabalik ang isang lumulutang na numero mula sa zero hanggang sa mas mababa sa isang o, sa mga termino sa matematika, ang saklaw 0,1. Ang binhi ay nagmula sa panloob na orasan ng makina o maaaring itakda nang manu-mano sa pag-andar ng srand.
ikot ( arg )
Kung arg ay isang halaga ng integer, nagbalik arg , kung hindi man ay nag-convert arg sa integer sa pamamagitan ng pag-ikot at ibalik ang na-convert na halaga.
kasalanan ( arg )
Ibinabalik ang sine ng arg , sinusukat sa radians.
sinh ( arg )
Ibinabalik ang hyperbolic sine ng arg . Kung ang resulta ay magiging sanhi ng overflow, ang isang error ay ibinalik.
sqrt ( arg )
Ibinabalik ang square root ng arg . Arg ay dapat na hindi negatibo.
srand ( arg )
Ang arg , na dapat ay isang integer, ay ginagamit upang i-reset ang binhi para sa random na numero ng generator. Ibinabalik ang unang random na numero mula sa binhi na iyon. Ang bawat interpreter ay may sariling binhi.
kulay-balat( arg )
Ibinabalik ang padaplis ng arg , sinusukat sa radians.
tanh ( arg )
Ibinabalik ang hyperbolic tangent ng arg .
Bilang karagdagan sa mga paunang natukoy na function na ito, maaaring ipaliwanag ng mga application ang mga karagdagang function na ginagamitTcl_CreateMathFunc().
Uri, Overflow, at Precision
Ang lahat ng mga panloob na computations na kinabibilangan ng mga integer ay ginagawa sa uri ng C mahaba , at lahat ng mga panloob na computations na kinasasangkutan ng lumulutang-point ay ginagawa sa uri ng C double . Kapag nagko-convert ang isang string sa lumulutang-point, ang exponent overflow ay nakita at nagreresulta sa isang Tcl error. Para sa conversion sa integer mula sa string, ang pagkakita ng overflow ay depende sa pag-uugali ng ilang mga gawain sa lokal na library ng C, kaya dapat itong ituring bilang hindi kapani-paniwala. Sa anumang kaso, ang integer overflow at underflow sa pangkalahatan ay hindi nakitang maaasahan para sa mga intermediate na resulta. Lumulutang-point overflow at underflow ay nakita sa degree na suportado ng hardware, na kung saan ay karaniwang medyo maaasahan.
Ang conversion sa mga panloob na representasyon para sa integer, floating-point, at string na mga operasyon ay tapos na awtomatikong kung kinakailangan. Para sa mga pag-compute ng aritmetika, ginagamit ang mga integer hanggang ilang ipinakilala ang lumulutang na punto na numero, at pagkatapos ay ginagamit ang lumulutang na punto. Halimbawa,
expr 5/4
nagbabalik 1, habang
expr 5 / 4.0 expr 5 / (haba ng string "abcd" + 0.0)
parehong bumalik 1.25. Ang mga halaga ng lumulutang na punto ay palaging ibabalik na may ``.'' o isange upang hindi sila magmukhang mga halaga ng integer. Halimbawa,
expr 20.0 / 5.0
babalik4.0, hindi4.
String Operations
Maaaring gamitin ang mga halaga ng string bilang mga operand ng mga operator ng paghahambing, bagaman ang pagsusuri ng tagapagpahayag ay nagsisikap na gumawa ng mga paghahambing bilang integer o lumulutang-point kapag maaari ito. Kung ang isa sa mga operand ng isang paghahambing ay isang string at ang iba ay may numerong halaga, ang numerong operand ay nakabalik sa isang string gamit ang C sprintf format specifier% d para sa integer at% g para sa mga halaga ng lumulutang-point. Halimbawa, ang mga utos
expr {"0x03"> "2"} expr {"0y" <"0x12"}
parehong return 1. Ang unang paghahambing ay tapos na gamit ang paghahambing integer, at ang pangalawang ay tapos na gamit ang string paghahambing pagkatapos ng ikalawang operand ay na-convert sa string18. Dahil sa tendency ng Tcl na tratuhin ang mga halaga bilang mga numero hangga't maaari, karaniwang hindi magandang ideya na gamitin ang mga operator==kapag gusto mo talagang paghahambing ng string at ang mga halaga ng mga operand ay maaaring di-makatwirang; ito ay mas mahusay sa mga kasong ito upang gamitin angstring utos sa halip.
Mga Pagsasaalang-alang sa Pagganap
Ilagay ang mga ekspresyon sa mga tirante para sa pinakamahusay na bilis at pinakamaliit na mga kinakailangan sa imbakan. Pinapayagan nito ang Tcl bytecode compiler upang makabuo ng pinakamahusay na code.
Tulad ng nabanggit sa itaas, ang mga expression ay pinalitan ng dalawang beses: isang beses sa pamamagitan ng Tcl parser at isang beses sa pamamagitan ng expr utos. Halimbawa, ang mga utos
itakda ang isang 3 itakda ang b {$ a + 2} expr $ b * 4
bumalik 11, hindi isang maramihang ng 4. Ito ay dahil ang Tcl parser ay unang kapalit$ a + 2 para sa variableb, pagkatapos ay angexpr susuriin ng utos ang expression$ a + 2 * 4.
Karamihan sa mga expression ay hindi nangangailangan ng pangalawang ikot ng mga pamalit. Alinman ang mga ito ay nakapaloob sa braces o, kung hindi, ang kanilang mga variable at command substitutions ay nagbibigay ng mga numero o mga string na hindi ang kanilang mga sarili ay nangangailangan ng mga pamalit. Gayunpaman, dahil ang ilang mga unbraced na expression ay nangangailangan ng dalawang round ng mga pamalit, ang bytecode compiler ay dapat magpalabas ng mga karagdagang tagubilin upang mahawakan ang sitwasyong ito. Kinakailangan ang pinakamahal na code para sa mga di-natanggap na mga expression na naglalaman ng mga pamalit na utos. Ang mga expression na ito ay dapat na ipatupad sa pamamagitan ng pagbuo ng bagong code sa bawat oras na ang expression ay naisakatuparan.
Mga Keyword
aritmetika, boolean, ihambing, pagpapahayag, malabo na paghahambing
Mahalaga: Gamitin ang lalaki command ( % lalaki ) upang makita kung paano ginagamit ang utos sa iyong partikular na computer.