Linux / Unix skipun: expr

Nafn

expr - Meta tjáningu

Yfirlit

expr arg ? arg arg ... ?

Samræður arg (skeyti milli þeirra), metur niðurstöðuna sem Tcl tjáningu og skilar gildi. Rekstraraðilar sem eru leyfðir í Tcl-tjáningum eru undirhópur þeirra sem eru leyfðir í C-tjáningum og hafa sömu merkingu og forgang og samsvarandi C-rekstraraðilar. Tjáning gefur næstum alltaf tölfræðilegum niðurstöðum (heiltala eða fljótandi stig gildi). Til dæmis, tjáningin

expr 8.2 + 6

metur í 14,2. Tcl tjáning er frábrugðin C tjáningum á þann hátt sem operands eru tilgreind. Einnig styðja Tcl tjáningar ekki tölfræðilegar aðgerðir og strengar samanburður.

Operands

A Tcl tjáning samanstendur af blöndu af operands, rekstraraðila og sviga. Hvítt rými má nota milli operands og rekstraraðila og sviga; það er hunsuð með leiðbeiningum tjáningarinnar. Ef unnt er, eru tolla túlkuð sem heiltala. Heiltölur geta verið tilgreindir í tugabrotum (venjulegt tilfelli), í oktal (ef fyrsta staf operandans er 0 ) eða í sexfaldadag (ef fyrstu tveir stafir operandans eru 0x ). Ef aðgerðarmaður hefur ekki eitt heiltalaformið hér að ofan, þá er það meðhöndlað sem flotapunktur, ef það er mögulegt. Fljótandi tölur geta verið tilgreindar á hvaða hátt sem samþykkt er af ANSI-samhæfðu C þýðanda (nema að f , F , L og L viðskeyti séu ekki leyfðar í flestum stöðvum). Til dæmis eru öll eftirfarandi gilt flotapunktar: 2.1, 3., 6e4, 7.91e + 16. Ef engin túlkun er möguleg, þá er operand eftir sem strengur (og aðeins takmörkuð hópur rekstraraðila má beita).

Stjórna má tilgreina á einhvern eftirfarandi hátt:

[1]

Sem tölugildi, annað hvort heiltala eða fljótandi punktur.

[2]

Sem Tcl breytu, með því að nota venjulega $ merkingu. Gildi breytu verður notuð sem operand.

[3]

Sem strengur sem fylgir með tvöföldum tilvitnunum. Tjáningarspurningin mun framkvæma bakslag, breytu og skiptaútskipun á upplýsingum milli vitna og nota það sem gildi sem operand

[4]

Sem strengur í festingum. Stafirnir á milli opna brace og samsvörun loka brace verður notuð sem operand án þess að skipta um.

[5]

Sem Tcl skipun sem fylgir með sviga. Stjórnin verður framkvæmd og niðurstaðan verður notuð sem operand.

[6]

Sem stærðfræðileg virkni sem rökin hafa eitthvað af ofangreindum myndum fyrir aðgerð, eins og synd ($ x) . Sjá hér að neðan fyrir lista yfir skilgreindar aðgerðir.

Þar sem staðskipti eiga sér stað hér að framan (td innan vitna strengja), eru þær gerðar með leiðbeiningum tjáningarinnar. Hins vegar hefur verið hægt að framkvæma viðbótarlag á staðskiptum af stjórnarsprengjunni áður en tjáningarvinnsluforritið var kallað. Eins og fjallað er um hér að neðan er venjulega best að ljúka tjáningum í torfum til að koma í veg fyrir að stjórnunarprófari geti skipt út um efni.

Fyrir nokkur dæmi um einföld orðatiltæki skaltu gera ráð fyrir að breytu a hafi gildi 3 og breytu b hefur gildi 6. Þá mun stjórnin vinstra megin við hverja línu fyrir neðan framleiða gildi á hægri hlið línunnar:

expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * [liður "6 2"] 8 expr {{orð eitt} <"orð $ a"} 0

Flugrekendur

Gildir rekstraraðilar eru taldar upp hér að neðan, flokkaðir í minnkandi röð forgangs:

- + ~!

Unary mínus, unary plús, hluti-vitur EKKI, rökrétt EKKI. Ekkert þessara aðgerða má beita á strengi og ekki aðeins má nota heiltala.

* /%

Margfalda, skipta, afgangi. Ekkert þessara aðgerða má beita á strengi, og aðeins má nota það sem eftir er til heiltala. Afgangurinn mun alltaf hafa sama táknið sem skiptastjóri og alger gildi sem er minni en deilirinn.

+ -

Bæta við og draga frá. Gildir fyrir hvaða tölubreytingar sem eru.

<< >>

Vinstri og hægri breyting. Gildir fyrir heiltala virkar aðeins. Réttur vakt breiðir alltaf táknmyndinni.

<> <=> =

Boolean minna, meiri, minna en eða jafnt og meira en eða jafnt. Hver rekstraraðili framleiðir 1 ef ástandið er satt, 0 annars. Þessir rekstraraðilar kunna að vera beittir á strengi og tölfræðilegum aðgerðum, en í því tilfelli er strengur samanburður notaður.

==! =

Boolean jafnt og ekki jafnt. Hver rekstraraðili framleiðir núll / eina niðurstöðu. Gildir fyrir alla operand tegundir.

&

Bit-vitur OG. Gildir fyrir heiltala virkar aðeins.

^

Bit-vitur eingöngu OR. Gildir fyrir heiltala virkar aðeins.

|

Bit-vitur EÐA. Gildir fyrir heiltala virkar aðeins.

&&

Rökrétt og. Gerir 1 niðurstöðu ef báðar operands eru ekki núll, 0 annars. Gildir fyrir boolskan og tölfræðilega (heiltala eða fljótandi punkt) virkar aðeins.

||

Rökrétt OR. Gerir 0 niðurstöðu ef báðir operands eru núll, 1 annars. Gildir fyrir boolskan og tölfræðilega (heiltala eða fljótandi punkt) virkar aðeins.

x ? y : z

Ef-þá-annars, eins og í C. Ef x er metið í núll, þá er niðurstaðan sú gildi y . Annars er niðurstaðan sú gildi z . The x operand verður að hafa tölugildi.

Sjá C handbókina til að fá nánari upplýsingar um niðurstöðurnar sem fram koma af hverjum rekstraraðila. Allir tvískiptur stjórnandi hópur vinstri til hægri innan sama forgangsröðunar. Til dæmis, stjórn

expr 4 * 2 <7

skilar 0.

The && , || , og ?: rekstraraðilar hafa `` laturt mat '', eins og í C, sem þýðir að aðgerð er ekki metin ef þau eru ekki nauðsynleg til að ákvarða niðurstöðu. Til dæmis, í stjórn

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

Einungis einn af [a] eða [b] verður í raun metin, allt eftir því sem gildi $ v . Athugaðu þó að þetta sé aðeins satt ef allur tjáningin er meðfylgjandi í handfangi; Annars mun Tcl parser meta bæði [a] og [b] áður en hann kallar á expr skipunina.

Stærðfræði

Tcl styður eftirfarandi stærðfræðilegar aðgerðir í tjáningu:

abs cosh log kvörn acos tvöfaldur log10 srand asin exp pow tan atan floor rand tanh atan2 fmod umferð loft hypot sin cos int sinh

abs ( arg )

Skilar alger gildi arg . Arg getur verið annaðhvort heiltala eða fljótandi punktur og niðurstaðan er skilað á sama formi.

acos ( arg )

Skilar arc cosine of arg , á bilinu [0, pi] radíónum. Arg ætti að vera á bilinu [-1,1].

asin ( arg )

Skilar arc sinus of arg , á bilinu [-pi / 2, pi / 2] radans. Arg ætti að vera á bilinu [-1,1].

atan ( arg )

Skilar arc tangent arg , á bilinu [-pi / 2, pi / 2] radíana.

atan2 ( x, y )

Skilar boga tangent y / x , á bilinu [-pi, pi] radíunum. x og y geta ekki bæði verið 0.

ceil ( arg )

Skilar minnstu heiltala gildi ekki minna en arg .

cos ( arg )

Skilar cosínus argsins , mælt í radíum.

cosh ( arg )

Skilar ofbeldi cosine of arg . Ef niðurstaðan veldur yfirgangi er villa skilað.

tvöfalt ( arg )

Ef arg er fljótandi gildi, skilar arg , breytir annars arg arg að fljóta og skilar breytingunni.

exp ( arg )

Skilar exponential arg , skilgreint sem e ** arg . Ef niðurstaðan veldur yfirgangi er villa skilað.

hæð ( arg )

Skilar stærsta heildarmagninu ekki hærra en arg .

fmod ( x, y )

Skilar fljótandi punkti sem eftir er af deilingu x með y . Ef y er 0 er villa skilað.

hypot ( x, y )

Reiknar lengd hypotenuse á rétthyrndum þríhyrningi ( x * x + y * y ).

int ( arg )

Ef arg er heiltala gildi, skilar arg , breytir annars arg arg til heiltala með styttingu og skilar breyttu gildi.

log ( arg )

Skilar náttúrulegum lógaritmum arg . Arg verður jákvætt gildi.

log10 ( arg )

Skilar grunn 10 logaritma arg . Arg verður jákvætt gildi.

pow ( x, y )

Reiknar gildi x sem er hækkað í kraftinn y . Ef x er neikvætt, y verður að vera heiltala.

rand ()

Skilar flotapunkti frá núlli til að minnsta kosti einum eða, í stærðfræðilegum skilmálum, bilinu [0,1]. Fræið kemur frá innri klukkunni á vélinni eða má setja handvirkt með srand virka.

umferð ( arg )

Ef arg er heiltala gildi, skilar arg , umbreytir annars arg við heiltala með því að hringja og skilar breytingunni.

synd ( arg )

Skilar sinus argsins , mælt í radíðum.

sinh ( arg )

Skilar ofbeldi sinna arg . Ef niðurstaðan veldur yfirgangi er villa skilað.

sqrt ( arg )

Skilar rétthyrningi arg . Arg verður að vera ekki neikvætt.

srand ( arg )

The arg , sem verður að vera heiltala, er notað til að endurstilla fræið fyrir handahófi númeraliðann. Skilar fyrstu handahófi númerinu frá því fræi. Hver túlkur hefur sitt eigið fræ.

tan ( arg )

Skilar tangent arg , mælt í radíum.

tanh ( arg )

Skilar ofbeldi tangent arg .

Til viðbótar við þessar fyrirfram skilgreindar aðgerðir geta umsóknir skilgreint viðbótarhlutverk með því að nota Tcl_CreateMathFunc ().

Tegundir, Yfirstreymi og Nákvæmni

Allar innri útreikningar sem innihalda heiltölur eru gerðar með C-gerðinni lengi og allar innri útreikningar sem tengjast fljótandi punkti eru gerðar með C-gerð tvöfalt . Þegar umbreyta strengi að fljótandi punkti er exponent flæðið greind og leiðir til Tcl villa. Til að umbreyta á heiltala úr strengi fer vökvaskilningur á hegðun sumra venja í staðbundnum C-bókasafni, þannig að það ætti að líta á sem óáreiðanlegt. Í öllum tilvikum eru heildarflæði og undirflæði almennt ekki greind áreiðanleg fyrir millistig. Fljótandi flæðisflæði og undirflæði er greind í þeim mæli sem vélbúnaðurinn styður, sem er almennt nokkuð áreiðanlegur.

Samskipti milli innri framsetninga fyrir heiltala, flotapunkt og strengahreyfingar eru gerðar sjálfkrafa eftir þörfum. Fyrir reikningsskýrslur eru heilar notaðir þar til nokkrar fljótandi punktar eru kynntar, en eftir það er flotið notað. Til dæmis,

expr 5/4

skilar 1, meðan

expr 5 / 4.0 expr 5 / ([strenglengd "abcd"] + 0,0)

bæði aftur 1.25. Fljótandi gildi eru alltaf skilað með `` . '' eða e svo að þeir líti ekki út eins og heiltala gildi. Til dæmis,

expr 20.0 / 5.0

skilar 4.0 , ekki 4 .

Stringsaðgerðir

String gildi má nota sem operands af samanburð rekstraraðila, þótt tjáning matari reynir að gera samanburð sem heiltala eða fljótandi-punktur þegar það getur. Ef eitt af samskiptatækjunum er strengur og hitt hefur tölugildi er tölfræðilegur operand breytt aftur í streng með því að nota C sprintf sniðið specifier % d fyrir heiltala og % g fyrir fljótandi stig gildi. Til dæmis, skipanirnar

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

bæði aftur 1. Fyrsta samanburðurinn er gerður með því að nota heiltölu samanburð, og seinni er gert með því að nota strengsamanburð eftir að annar operand er breytt í strenginn 18 . Vegna þess að Tcl hefur tilhneigingu til að meðhöndla gildi sem tölur þegar mögulegt er, þá er það ekki almennt góð hugmynd að nota rekstraraðila eins og == þegar þú vilt virkilega strengjamæling og gildi operandanna gætu verið handahófskennt; Það er betra í þessum tilvikum að nota strengskipunina í staðinn.

Árangurshugmyndir

Taktu tjáningu í armbönd fyrir bestu hraða og minnstu geymsluþörf. Þetta gerir Tcl bytecode þýðanda kleift að búa til besta kóðann.

Eins og áður hefur komið fram eru tjáningar skipt út tvisvar: einu sinni með Tcl flokka og einu sinni með expr skipuninni. Til dæmis, skipanirnar

settu 3 setja b {$ a + 2} expr $ b * 4

Return 11, ekki margfeldi af 4. Þetta er vegna þess að Tcl parser muni fyrst skipta $ a + 2 fyrir breytu b , þá mun expr stjórnin meta tjáningu $ a + 2 * 4 .

Flest tjáning krefst ekki annarrar skiptis um skipti. Annaðhvort eru þau lokuð í festingar eða, ef ekki, breytu þeirra og skiptaútskipanir gefa tölur eða strengir sem ekki sjálfir krefjast skiptis. Hins vegar vegna þess að nokkrar unbraced tjáningar þurfa tvær umferðir skipta skal bytecode þýðandi afhenda viðbótar leiðbeiningar til að takast á við þetta ástand. Dýrasta kóðinn er krafist fyrir unbraced tjáning sem inniheldur skiptaútskipanir. Þessar tjáningar verða að vera framkvæmdar með því að búa til nýjan kóða í hvert skipti sem tjáningin er framkvæmd.

Leitarorð

tölur, boolsk , bera saman, tjáning, loðinn samanburður

Mikilvægt: Notaðu stjórn mannsins ( % maður ) til að sjá hvernig stjórn er notuð á tölvunni þinni.