Ime
expr - Ocenite izraz
Povzetek
expr arg ? arg arg … ?
Concatenates arg 's (dodajanje presledkov med njimi), oceni rezultat kot izraz Tcl in vrne vrednost. Operaterji, dovoljeni v izrazih Tcl, so podmnožica operaterjev, dovoljenih v izrazih C, in imajo isti pomen in prednost kot ustrezni operaterji C. Izrazi skoraj vedno dajejo številčne rezultate (vrednosti integer ali plavajoče točke). Na primer, izraz
expr 8.2 + 6
ocenjuje na 14,2. Tcl izrazi se razlikujejo od izrazov C tako, kot so navedeni operandi. Tcl izrazi podpirajo tudi ne-številčne operande in primerjave nizov.
Operande
Izraz Tcl je sestavljen iz kombinacije operandov, operatorjev in oklepajev. Med operandi in operatorji ter oklepajema se lahko uporabi bel prostor; z navodili izraza se zanemarijo. Kjer je mogoče, se operandi razlagajo kot celoštevilčne vrednosti. Celotne vrednosti se lahko določijo v decimalnem (običajnem primeru) v oktalnem (če je prvi znak operanda0) ali v heksadecimalnem (če sta prva dva znaka operanda0x). Če operand nima ene od zgoraj navedenih številskih števil, se ga obravnava kot številka s plavajočo vejico, če je to mogoče. Številke plavajočih točk se lahko navedejo na poljubnem načinu, ki ga sprejme prevajalnik C, skladen z ANSI (razen, da jef, F, l, inL v večini naprav ne bodo dovoljene dopolnitve). Na primer, vse naslednje so veljavne številke s plavajočo vejico: 2.1, 3., 6e4, 7.91e + 16. Če nobena numerična interpretacija ni možna, je ostanek ostan kot niz (lahko pa se uporabi le omejen nabor operaterjev).
Operande lahko določite na enega od naslednjih načinov:
1
Kot številsko vrednost, bodisi celo število ali plavajoča točka.
2
Kot spremenljivka Tcl, uporabite standardno$ notacija. Vrednost spremenljivke bo uporabljena kot operand.
3
Kot niz, zaprt v dvojnih narekovajev. Razčlenjevalnik izrazov bo izvedel backslash, spremenljivke in ukazne substitucije na podatkih med navednicami in uporabljeno vrednost uporabil kot operand
4
Kot niz, zaprt z zavihki. Znaki med odprtim nosilcem in ustreznim zapiralnim oklepajem se bodo uporabili kot operand brez kakršnih koli zamenjav.
5
Kot ukaz Tcl je priložen v oklepajih. Ukaz bo izveden in njegov rezultat bo uporabljen kot operand.
6
Kot matematična funkcija, katere argumenti imajo katero koli od zgornjih oblik za operande, kot sosin ($ x). Spodaj si oglejte seznam opredeljenih funkcij.
Kjer se zgornje substitucije zgodi (npr. Znotraj citiranih nizov), se izvajajo po navodilih izraza. Vendar pa je lahko pred razpisovalnikom izrazov dodatni sloj zamenjave že opravil razčlenjevalnik ukaza. Kot je razloženo v nadaljevanju, je običajno najbolje, da priložite izraze v zavihkih, da preprečite, da bi razčlenjevalnik ukaza izvajal zamenjave vsebine.
Za nekatere primere preprostih izrazov, domnevamo spremenljivkoa ima vrednost 3 in spremenljivkobima vrednost 6. Nato ukaz na levi strani vsake spodnje vrstice prikaže vrednost na desni strani črte:
expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5,6 expr 4 * llength "6 2" 8 expr {{word one} <"word $ a"} 0
Operaterji
Veljavni operaterji so navedeni spodaj, razvrščeni po padajočem vrstnem redu:
- + ~ !
Unalni minus, unary plus, bitno NOT, logično NE. Noben od teh operandov ne sme biti uporabljen za niz operandov, in bitno modre NOT se lahko uporablja samo za celo število.
* / %
Pomnožite, delite, preostanek. Noben od teh operandov se ne sme uporabljati za niz operandov, preostali pa se lahko uporabljajo samo za celo število. Preostanek bo vedno imel enak znak kot delilec in absolutno vrednost manjša od delitelja.
+ -
Dodaj in odštej. Velja za vse numerične operande.
<< >>
Levi in desni premik. Velja samo za celo število operandov. Desni premik vedno propagira znakovni bit.
< > <= >=
Boolove manj, večje, manjše ali enake in večje ali enake. Vsak operator proizvaja 1, če je pogoj resničen, 0 pa drugače. Ti operaterji se lahko uporabljajo za nize in številske operande, pri čemer se uporablja primerjava nizov.
== !=
Boolean enak in ni enak. Vsak operater proizvaja rezultat nič / en. Velja za vse vrste operandov.
&
Bitno in. Velja samo za celo število operandov.
^
Bitno izključno ALI. Velja samo za celo število operandov.
|
Bitno pametno ALI. Velja samo za celo število operandov.
&&
Logično IN. Ustvari 1 rezultat, če sta oba operanda ničelna, 0 drugače. Velja samo za boolovske in numerične (celoštevilske ali plavajoče točke) operande.
||
Logično ALI. Ustvari rezultat 0, če sta oba operanda enaka nič, 1 drugače. Velja samo za boolovske in numerične (celoštevilske ali plavajoče točke) operande.
x ? y : z
Če-potem-drugje, kot v C. Če x vrednoti na nič, potem je rezultat vrednost y . V nasprotnem primeru je rezultat vrednost z . The x operand mora imeti številčno vrednost.
Za več podrobnosti o rezultatih, ki jih pripravi vsak operater, si oglejte priročnik C. Vsi binarni operaterji so levo-desno na istem nivoju prednost. Na primer ukaz
expr 4 * 2 <7
vrne 0.
The&&, ||, in?: operaterji imajo "lažno oceno", tako kot v C, kar pomeni, da operandi niso ovrednoteni, če niso potrebni za določitev rezultata. Na primer, v ukazu
expr {$ v? a: b}
samo ena oda alib bodo dejansko ocenjeni, odvisno od vrednosti$ v. Upoštevajte pa, da je to res samo, če je celoten izraz zaprt v oklepajih; drugače bo razčlenjevalnik Tcl ovrednotil obojea inb preden se sklicujete naexpr ukaz.
Matematične funkcije
Tcl podpira naslednje matematične funkcije v izrazih:
abs coshdnevniksqrt acos dvojnolog10srand kot v exppowtan atan nadstropjerandtanh atan2 fmodokrogla strop hipotgreh cos intsinh
abs ( arg )
Vrne absolutno vrednost arg . Arg je lahko celo celo število ali plavajoča točka, rezultat pa se vrne v isti obliki.
acos ( arg )
Vrne arc kosinus arg , v območju 0, pi radianov. Arg mora biti v dosegu -1,1.
kot v( arg )
Vrne arc sine od arg , v razponu -pi / 2, pi / 2 radianov. Arg mora biti v dosegu -1,1.
atan ( arg )
Vrne tangento v loku arg , v razponu -pi / 2, pi / 2 radianov.
atan2 ( x, y )
Vrne tangento v loku y / x , v območju -pi, pi radianov. x in y ne more biti oba 0.
strop ( arg )
Vrne najmanjše celoštevilčno vrednost, ki ni manjša od arg .
cos ( arg )
Vrne kosinus arg , merjeno v radianih.
cosh ( arg )
Vrne hiperbolični kosinus arg . Če bi rezultat povzročil prelivanje, se vrne napaka.
dvojno ( arg )
Če arg je plavajoča vrednost, vrne arg , sicer pretvori arg da plava in vrne pretvorjeno vrednost.
exp ( arg )
Vrne eksponent arg , opredeljen kot e ** arg . Če bi rezultat povzročil prelivanje, se vrne napaka.
nadstropje( arg )
Vrne največjo integralno vrednost, ki ni večja od arg .
fmod ( x, y )
Vrne preostali del plavajoče točke delitve x z y . Če y je 0, vrne se napaka.
hipot ( x, y )
Izračuna dolžino hipotenuse pravokotnega trikotnika ( x * x + y * y ).
int ( arg )
Če arg je celoštevilčna vrednost, vrne arg , sicer pretvori arg do celote s skrajšanjem in vrne pretvorjeno vrednost.
dnevnik ( arg )
Vrne naravni logaritem arg . Arg mora biti pozitivna vrednost.
log10 ( arg )
Vrne osnovni 10 logaritem arg . Arg mora biti pozitivna vrednost.
pow ( x, y )
Izračuna vrednost x dvigne na moč y . Če x je negativen, y mora biti celoštevilčna vrednost.
rand ()
Vrne številko s plavajočo vejico od nič do samo manj kot eno, ali matematično, obseg 0,1). Seme prihaja iz notranje ure stroja ali pa se ročno nastavi s srandno funkcijo.
krog ( arg )
Če arg je celoštevilčna vrednost, vrne arg , sicer pretvori arg v celoto z zaokroževanjem in vrne pretvorjeno vrednost.
greh ( arg )
Vrne sinus arg , merjeno v radianih.
sinh ( arg )
Vrne hiperbolični sinus arg . Če bi rezultat povzročil prelivanje, se vrne napaka.
sqrt ( arg )
Vrne kvadratni koren od arg . Arg morajo biti negativni.
srand ( arg )
The arg , ki mora biti celo število, se uporablja za ponastavitev semena za generatorja naključnih števil. Vrne prvo naključno številko iz tega semena. Vsak tolmač ima svoje seme.
tan ( arg )
Vrne tangento arg , merjeno v radianih.
tanh ( arg )
Vrne hiperbolični tangens arg .
Poleg teh vnaprej določenih funkcij lahko aplikacije določijo dodatne funkcije z uporaboTcl_CreateMathFunc().
Vrste, prelivanje in natančnost
Vsi notranji izračuni, ki vključujejo cela števila, se opravijo s tipom C dolga , in vse notranje izračune, ki vključujejo plavajočo vejico, se opravijo s tipom C dvojno . Pri pretvorbi niza v plavajočo točko se odkrije presežek eksponentov in povzroči napako Tcl. Za pretvorbo v celo število iz niza je zaznavanje prelivanja odvisno od vedenja nekaterih rutin v lokalni knjižnici C, zato je treba obravnavati kot nezanesljivo. Vsekakor se pri vmesnih rezultatih navadno zanesljivo ne odkrije celotnega preliva in preliva. Overflow in preliv v plavajoči vejici se zazna do stopnje, ki jo podpira strojna oprema, kar je na splošno precej zanesljivo.
Konverzija med notranjimi predstavitvami za celo število, plavajoče točke in niz operandov se izvede samodejno, kot je potrebno. Za aritmetične izračune se uporabijo cela števila, dokler ni vnesena številka s plavajočo vejico, po kateri se uporablja plavajoča točka. Na primer,
expr 5/4
vrne 1, medtem ko
expr 5 / 4.0 expr 5 / (dolžina niza "abcd" + 0.0)
obe vrnejo 1.25. Vrednosti plavajoče točke se vedno vrnejo s "`.'' alie tako da ne bodo izgledali kot celoštevilčne vrednosti. Na primer,
expr 20,0 / 5,0
vrne4.0, ne4.
String operacije
Vrednosti nizov se lahko uporabijo kot operande operatorjev za primerjavo, čeprav ocenjevalec izrazov skuša narediti primerjave kot celo število ali plavajočo točko, če je to mogoče. Če je eden od operandov primerjave niz, drugi pa ima številsko vrednost, se numerični operand vrne v niz z uporabo C sprintf format specifier% d za cela števila in% g za vrednosti s plavajočo vejico. Na primer, ukazi
expr {"0x03"> "2"} expr {"0y" <"0x12"}
obe vrnejo 1. Prva primerjava se opravi z uporabo celovite primerjave, druga pa se opravi z uporabo primerjave nizov po pretvorbi drugega operanda v niz18. Zaradi tendence Tcl-a za obravnavo vrednosti kot številk, kadar koli je to mogoče, na splošno ni dobra ideja, da uporabite operaterje, kot so==ko resnično želiš primerjavo nizov in bi lahko bile vrednosti operandov poljubne; v teh primerih je bolje uporabitiniz namesto tega.
Ocene učinkovitosti
Izrazi v zapahih za najboljšo hitrost in najmanjše zahteve za shranjevanje. To omogoča prevajalnik Tcl bytecode, da ustvari najboljšo kodo.
Kot je navedeno zgoraj, so izrazi dvakrat zamenjani: enkrat z razčlenjevalnikom Tcl in enkrat z expr ukaz. Na primer, ukazi
nastavite 3 nastavite b {$ a + 2} expr $ b * 4
vrnitev 11, ne večkratnik 4. To je zato, ker bo najprej nadomestil razčlenjevalnik Tcl$ a + 2 za spremenljivkob, nato paexpr ukaz bo ovrednotil izraz$ a + 2 * 4.
Večina izrazov ne zahteva drugega kroga zamenjave. Bodisi so zaprti v zavihkih ali, če ne, njihove spremenljivke in ukazne substitucije dajejo številke ali nizi, ki sami ne zahtevajo zamenjave. Ker pa nekaj neobdelanih izrazov potrebuje dva kroga zamenj, mora prevajalnik bytecode oddati dodatna navodila za obravnavo te situacije. Najdražja koda je potrebna za neobdelane izraze, ki vsebujejo ukazne substitucije. Te izraze je treba uvesti z ustvarjanjem nove kode vsakič, ko se izraz izvrši.
Ključne besede
aritmetična, logična, primerjalna, izrazna, mehka primerjava
Pomembno: Uporabi človek ukaz ( % človek ), da vidite, kako se na vašem računalniku uporablja ukaz.













