vardas
expr - vertinti frazę
Anotacija
expr arg ? Arg arg … ?
Concatenuoja arg 's (pridedant separatorių tarpus tarp jų), vertina rezultatą kaip Tcl išraišką ir grąžina vertę. Tcl išraiškos leidžiami operatoriai yra C parašų leidžiamų operatorių pogrupis, ir jie turi tą pačią reikšmę ir pirmenybę, kaip ir atitinkami C operatoriai. Išraiškos beveik visuomet duoda skaitinius rezultatus (sveikuosius ar slankiosios vertės taškus). Pavyzdžiui, išraiška
Expr 8.2 + 6
įvertina iki 14,2. Tcl išraiškos skiriasi nuo C raiškos taip, kaip nurodomi operandai. Be to, Tcl išraiškos palaiko ne skaitinius operandus ir styginių palyginimus.
Operandai
Tcl išraišką sudaro operandų, operatorių ir skliaustų derinys. Tarp operandų ir operatorių ir skliausteliuose gali būti naudojama balta erdvė; tai ignoruojama išraiškos instrukcijose. Kur įmanoma, operandai interpretuojami kaip sveiki skaičiai. Integerų reikšmės gali būti nurodytos dešimtainėse (įprastai), octal (jei yra pirmasis operando simbolis0) arba šešioliktainis (jei yra pirmieji du operando simboliai0x) Jei operandas neturi vieno iš aukščiau nurodytų sveikojo skaičiaus formatų, tai yra laikoma slankaus taško skaičiumi, jei tai įmanoma. Plūduriuojančių taškų skaičiai gali būti nurodyti bet kuriuo būdu, kurį pripažino ANSI suderinamas C kompiliatorius (išskyrus tą, kurįf, F, l, irL priesagos nebus leidžiamos daugumoje įrenginių). Pavyzdžiui, visi toliau nurodyti galiojantys slankiojo kablelio skaičiai: 2.1, 3., 6e4, 7.91e + 16. Jei skaitmeninis aiškinimas neįmanomas, operandas paliekamas kaip eilutė (ir jai gali būti taikomas tik ribotas operatorių rinkinys).
Operande galima nurodyti bet kuriuo iš šių būdų:
1
Kaip skaitmeninė reikšmė, arba sveikas skaičius ar kintamasis taškas.
2
Kaip Tcl kintamasis, naudojant standartinį$ žymėjimas. Kintamojo vertė bus naudojama kaip operandas.
3
Kaip eilutė, pridedama dvigubo kabučių. Parašas parserio metu atliks bakstelėjimo, kintamojo ir komandos keitimus tarp informacijos tarp citatų ir naudos gautą reikšmę kaip operandą
4
Kaip stygos, pridedamos petnešos. Tarp operacinės atramos ir atitikimo glaudžiai tvirtinimo ženklai bus naudojami kaip operandas be jokių pakeitimų.
5
Kaip komandą "Tcl" pridedama skliausteliuose. Komanda bus vykdoma, o jo rezultatas bus naudojamas kaip operandas.
6
Kaip matematinė funkcija, kurios argumentai turi bet kurią iš pirmiau nurodytų formų operandams, pavyzdžiui,nuodėmė ($ x). Žemiau pateikiamas nustatytų funkcijų sąrašas.
Kai keitimai įvyksta aukščiau (pvz., Viduje cituojamų eilučių), jie yra atliekami pagal išraiškos nurodymus. Tačiau papildomas sluoksnio pakeitimas gali būti atliktas komandų analizatoriaus prieš išraiškos procesoriaus pavadinimą. Kaip aptarta toliau, dažniausiai geriausia pridėti raiškos į petnešeles, kad komandinis analizatorius negalėtų atlikti pakeitimų turiniu.
Kai kuriems paprastų išraiškų pavyzdžiams tarkime kintamąjįa turi 3 vertę ir kintamąjįbturi reikšmę 6. Tada kiekvienos iš toliau pateiktų eilučių kairėje pusėje pateikta komanda parodys reikšmę dešinėje linijos pusėje:
Expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * ilgis "6 2" 8 expr ({word one} <"word $ a") 0
Operatoriai
Toliau nurodyti galiojantys operatoriai, suskirstyti į mažėjančią pirmumo eilę:
- + ~ !
Unary minus, unary plus, bit-wise NOT, logical NOT. Nė vienas iš šių operandų negali būti taikomas styginių operandams, o truputį NE. Gali būti taikomas tik sveikiems skaičiams.
* / %
Padauginkite, padalykite, likusi dalis. Nė vienas iš šių operandų negali būti taikomas styginių operandams, o likusieji gali būti taikomi tik sveikiems skaičiams. Likusi dalis visada turės tą patį ženklą, kaip ir daliklis, o absoliutinė vertė yra mažesnė nei daliklis.
+ -
Pridėti ir atimti. Galioja bet kokiems skaitiniams operandams.
<< >>
Kairysis ir dešinysis poslinkis. Galioja tik sveikiis skaičiavimams. Tiesinysis poslinkis visada platina ženklą.
< > <= >=
Būlio mažesnis, didesnis, mažesnis arba lygus ir didesnis arba lygus. Kiekvienas operatorius gamina 1, jei sąlyga yra teisinga, 0 kitaip. Šie operatoriai gali būti naudojami styginiams, taip pat skaitiniams operandams, tokiu atveju naudojamas styginių palyginimas.
== !=
Būlio lygus ir ne lygus. Kiekvienas operatorius duoda rezultatą nulis / vienas. Galioja visiems operandų tipams.
&
Bjaurus ir. Galioja tik sveikiis skaičiavimams.
^
Išmintingas išimtinis ARBA. Galioja tik sveikiis skaičiavimams.
|
Truputį OR. Galioja tik sveikiis skaičiavimams.
&&
Logiška ir. Gamina 1 rezultatą, jei abu operandai yra ne nuliniai, 0 kitaip. Galioja tik biuleteniams ir skaitiniams (sveiki ar skaičiuojantys taškai) operandai.
||
Logiškas OR. Gamina 0 rezultatą, jei abu operandai yra nuliniai, 1 kitaip. Galioja tik biuleteniams ir skaitiniams (sveiki ar skaičiuojantys taškai) operandai.
x ? y : z
Jei tada-kitas, kaip ir C. Jei x įvertina ne nuliui, tada rezultatas yra y . Priešingu atveju rezultatas yra z . The x operandas turi turėti skaitinę reikšmę.
Daugiau informacijos apie kiekvieno operatoriaus pateiktus rezultatus rasite C vadove. Visa dvejetainių operatorių grupė iš kairės į dešinę per tą patį prioriteto lygį. Pavyzdžiui, komanda
expr 4 * 2 <7
grąžina 0.
The&&, ||, ir?: operatoriai turi "tinginį įvertinimą", kaip ir C, o tai reiškia, kad operandai nėra įvertinami, jei jie nėra reikalingi rezultatams nustatyti. Pavyzdžiui, komandoje
Expr {$ v? a: b}
tik vienas iša arbab bus iš tikrųjų įvertinta, priklausomai nuo$ v. Tačiau atkreipkite dėmesį, kad tai yra tik tiesa, jei visa frazė yra uždėta į petnešomis; priešingu atveju Tcl analizatorius įvertins abua irb prieš pradėdamas kreiptis įexpr komanda
Matematikos funkcijos
Tcl palaiko šias matematines funkcijas išraiškose:
abs ashPrisijungtisqrt Acos dvigubailog10srand asin exppowtan įdegis grindysrandastanh atan2 Fmodapvalus ceil hipotekanuodėmė cos intsinh
abs ( arg )
Grąžina absoliučią vertę arg . Arg gali būti sveikas arba plūduriuojantis taškas, o rezultatas grąžinamas ta pačia forma.
acos ( arg )
Grąžina arc cosinus of arg , diapazone 0, pi radians. Arg turėtų būti diapazone -1,1.
asin ( arg )
Grąžina arc sine iš arg , diapazone -pi / 2, pi / 2 radianų. Arg turėtų būti diapazone -1,1.
įdegis( arg )
Grąžina lanko tangentą arg , diapazone -pi / 2, pi / 2 radianų.
atan2 ( x, y )
Grąžina lanko tangentą y / x , intervalas -pi, pi radians. x ir y negali abu būti 0.
ceil ( arg )
Grąžina mažiausią sveikojo skaičiaus reikšmę ne mažiau kaip arg .
cos ( arg )
Grąžina kosinusą arg , matuojamas radianais.
cosh ( arg )
Grąžina hiperbolinį kosiną iš arg . Jei rezultatas sukeltų perpildymą, grąžinama klaida.
dvigubas ( arg )
Jei arg yra kintama vertė, grąžina arg , kitaip konvertuoja arg pervažiuoti ir grąžina konvertuotą vertę.
exp ( arg )
Grąžina eksponenciją arg , apibrėžiamas kaip e ** arg . Jei rezultatas sukeltų perpildymą, grąžinama klaida.
grindys ( arg )
Grąžina didžiausią integralą ne didesnę kaip arg .
fmod ( x, y )
Grąžina slankiojo kablelio dalijimo likutį x pagal y . Jei y yra 0, grąžinama klaida.
hipot ( x, y )
Apskaičiuojamas trikampio dešininio kampo hipotenuzės ilgis ( x * x + y * y ).
int ( arg )
Jei arg yra sveikas skaičius, grąžina arg , kitaip konvertuoja arg į sveiką skaičių per trupmeną ir grąžina konvertuotą vertę.
žurnalas ( arg )
Grąžina natūralų logaritmą arg . Arg turi būti teigiama vertė.
log10 ( arg )
Grąžina bazinį 10 logaritmą arg . Arg turi būti teigiama vertė.
pow ( x, y )
Apskaičiuojama vertė x pakeltas į valdžią y . Jei x yra neigiamas, y turi būti sveika vertė.
rand ()
Grąžina slankiojo kablelio skaičių nuo nulio iki maždaug vienos arba, matematiškai, diapazono 0,1. Sėkla gaunama iš vidinio mašinos laikrodžio arba gali būti nustatytas rankiniu būdu su funkcija "srand".
apvalus ( arg )
Jei arg yra sveikas skaičius, grąžina arg , kitaip konvertuoja arg į sveikąjį skaičių apvalinant ir grąžina konvertuotą vertę.
nuodėmė ( arg )
Grąžina sine iš arg , matuojamas radianais.
sinh ( arg )
Grąžina hiperbolinę siną iš arg . Jei rezultatas sukeltų perpildymą, grąžinama klaida.
sqrt ( arg )
Grąžina kvadratinę šaknį iš arg . Arg turi būti neigiamas.
srand ( arg )
The arg , kuris turi būti sveikasis skaičius, naudojamas atsitiktinių skaičių generatoriaus sėklai iš naujo nustatyti. Grąžina pirmąjį atsitiktinį skaičių iš šios sėklos. Kiekvienas vertėjas turi savo sėklą.
tan ( arg )
Grąžina tangentą iš arg , matuojamas radianais.
tanh ( arg )
Grąžina hiperbolinį tangentą arg .
Be šių iš anksto nustatytų funkcijų, programos gali apibrėžti papildomas funkcijasTcl_CreateMathFunc().
Tipai, perpildymas ir tikslumas
Visi vidiniai skaičiavimai, kuriuose yra sveikieji skaičiai, atliekami naudojant C tipą ilgai , o visi vidiniai skaičiavimai, susiję su slankais tašku, atliekami naudojant C tipą dvigubai . Kai konvertuojame eilutę į slankiojo kablelio tašką, aptikta eksponentų perpildymas ir sukelia Tcl klaidą. Norėdami konvertuoti į sveiką skaičių iš eilutės, perpildymo aptikimas priklauso nuo kai kurių įprastų elgesio vietos C bibliotekoje, todėl jis turėtų būti laikomas nepatikimu. Bet kokiu atveju, sveiki perpildymai ir nutekėjimas paprastai nėra patikimai nustatyti tarpiniams rezultatams. Plūduriuojančio taško perpildymas ir nutekėjimas nustatomas pagal techninės įrangos lygį, kuris paprastai yra gana patikimas.
Konvertavimas tarp vidinių parodymų už sveikas, slankiojo kablelio ir styginių operandų atliekamas automatiškai, kai reikia. Iš aritmetinių skaičiavimų naudojami sveikieji skaičiai, kol įvedamas kai kurių slankiojo kablelio skaičius, po kurio naudojamas slankaus taškas. Pavyzdžiui,
Expr 5/4
grąžina 1, o
Expr 5 / 4.0 expr 5 / (eilutės ilgis "abcd" + 0.0)
abu grąžina 1,25. Kintamos taško vertės visada grąžinamos su ``."" arbae kad jie nebūtų atrodo kaip sveiki reikšmės. Pavyzdžiui,
expr 20.0 / 5.0
grąžina4.0ne, ne4.
Styginių operacijos
Styginių reikšmės gali būti naudojamos kaip palyginimų operatorių operandai, nors išraiškos vertintojas bando atlikti palyginimus kaip sveikuosius ar kintamuosius taškus. Jei vienas iš palyginimo operandų yra eilutė, o kita - skaitine verte, skaitinis operandas yra konvertuojamas atgal į eilutę naudojant C Sprintf formato specifikatorius% d už sveikus ir% g už kintamojo taško vertes. Pavyzdžiui, komandos
expr ("0x03"> "2") expr ("0y" <"0x12")
abu grąžina 1. Pirmasis palyginimas atliekamas naudojant skaičių palyginimą, o antrasis atliekamas naudojant eilučių palyginimą po to, kai antrasis operandas yra konvertuojamas į eilutę18. Dėl Tcl tendencijos vertinti vertes kaip skaičių, kai tik įmanoma, apskritai nėra tikslinga naudoti tokius operatorius kaip==kai tikrai norite, kad eilučių palyginimas ir operandų vertės būtų savavališkos; šiais atvejais geriau naudotieilutė komanda vietoj to.
Veiklos aspektai
Pridėkite raiškos petnešose, kad būtų pasiektas geriausias greitis ir mažiausi saugojimo reikalavimai. Tai leidžia Tcl baitų kodo kompiliatoriui sugeneruoti geriausią kodą.
Kaip minėta pirmiau, išraiškos yra pakeičiamos du kartus: vieną kartą Tcl parserio ir vieną kartą expr komanda Pavyzdžiui, komandos
nustatyti 3 nustatyti b ($ a + 2) Expr $ b * 4
grįžti 11, o ne 4 kartas. Tai yra todėl, kad pirmiausia pakeis Tcl parsētājs$ a + 2 už kintamąjįb, tadaexpr komanda įvertins išraišką$ a + 2 * 4.
Daugumai išraiškų nereikia antros pakopos pakeitimų. Arba jie pridedami į petnešomis, o jei ne, jų kintamieji ir komandų pakeitimai duoda skaičių arba eilutes, kurių pačios nereikia keisti. Tačiau dėl to, kad kelias neišspręstas išraiškas reikalauja dviejų pakaitų raundų, baitkodų kompiliatorius turi išleisti papildomas instrukcijas šiam atvejui įveikti. Brangiausias kodas reikalingas nepakeistoms išraiškoms, kuriose yra komandų pakeitimų. Šios išraiškos turi būti įgyvendintos generuojant naują kodą kiekvieną kartą, kai frazė yra įvykdyta.
Raktiniai žodžiai
aritmetinis, boolean, palyginimas, išraiška, neaiškus palyginimas
Svarbu: Naudoti vyras komanda ( % vyras ), kad pamatytumėte, kaip komanda naudojama jūsų konkrečiame kompiuteryje.