Linux / UNIX Kòmandman: ekspr

Non

expr - Evalye yon ekspresyon

Rezime

ekspr agi ? ...

Konekte aga a (ajoute espas separator ant yo), evalye rezilta a kòm yon ekspresyon Tcl, epi retounen valè a. Operatè yo pèmèt nan Tx ekspresyon yo se yon subset nan operatè yo pèmèt nan ekspresyon C, epi yo gen siyifikasyon an ak priyorite kòm operatè yo ki korespondan C. Ekspresyon prèske toujou bay rezilta nimerik (valè nonb antye oswa valab pwen). Pou egzanp, ekspresyon an

expr 8.2 + 6

evalye 14.2. Ekspresyon Tcl diferan de ekspresyon C nan fason ke operand yo espesifye. Epitou, ekspresyon Tcl sipòte operasyon ki pa nimerik ak konparezon fisèl.

Operasyon

Yon ekspresyon TCL konsiste de yon konbinezon de operand, operatè, ak parantèz. Yo ka itilize espas blanch ant operatè yo ak operatè ak parantèz; li se inyore pa enstriksyon ekspresyon an. Ki kote sa posib, operand yo entèprete kòm valè nonb antye. Integer valè yo ka espesifye nan desimal (ka nòmal), nan octal (si karaktè an premye nan operand lan se 0 ), oswa nan ekzadesimal (si premye karaktè yo nan opera a se 0x ). Si yon operan pa gen youn nan fòma antye ki bay pi wo a, lè sa a li trete kòm yon nimewo k ap flote-pwen si sa posib. Nimewo flotan-pwen yo ka espesifye nan nenpòt nan fason yo aksepte pa yon ANSI-konfòme C compiler (eksepte ke f , F , l , ak L sifiks yo p ap pèmèt nan pifò enstalasyon). Pou egzanp, tout bagay sa yo yo valab pwen k ap flote pwen: 2.1, 3., 6e4, 7.91e + 16. Si pa gen okenn entèpretasyon nimerik se posib, Lè sa a, yon operand kite kòm yon fisèl (epi sèlman yon seri limite nan operatè yo ka aplike nan li).

Opsyon yo ka espesifye nan nenpòt nan fason sa yo:

[1]

Kòm yon valè nimerik, swa nonb antye oswa pwen k ap flote.

[2]

Kòm yon varyab Tcl, lè l sèvi avèk estanda $ notasyon. Valè varyab la pral itilize kòm operan an.

[3]

Kòm yon fisèl ki fèmen nan doub-quotes. Parser ekspresyon an ap fè backslash, varyab, ak lòd ranplasman sou enfòmasyon ki ant quotes yo, epi sèvi ak valè a ki kapab lakòz kòm operan an

[4]

Kòm yon fisèl ki fèmen nan aparèy òtopedik. Karaktè yo ant atèl la louvri ak asye pre atèl yo pral itilize kòm operan an san yo pa nenpòt ki sibstitisyon.

[5]

Kòm yon lòd Tcl ki fèmen nan parantèz. Yo pral egzekite lòd la epi y ap itilize rezilta li kòm opera.

[6]

Kòm yon fonksyon matematik ki gen agiman gen nenpòt nan fòm ki pi wo a pou operand, tankou peche ($ x) . Gade anba a pou yon lis fonksyon defini.

Ki kote sibstans ki fèt anlè (egzanp andedan strings), yo fè nan enstriksyon ekspresyon an. Sepandan, yon kouch adisyonèl nan sibstitisyon ka deja yo te fèt pa parser nan lòd anvan yo te ekspresyon processeur a te rele. Kòm diskite anba a, li pi bon anmezi pou mete ekspresyon nan aparèy òtopedik pou anpeche parsè a bay lòd pou fè sibstitisyon sou sa.

Pou kèk egzanp ekspresyon ki senp, sipoze varyab la gen valè 3 ak varyab b gen valè 6. Lè sa a, lòd la sou bò gòch nan chak nan liy ki anba yo pral pwodwi valè a sou bò dwat nan liy lan:

ekspr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 ekspr 4 * [llength "6 2"] 8 expr {{mo sèl} <"mo $ a"} 0

Operatè

Operatè ki valab yo ki nan lis anba a, gwoupe nan diminye lòd nan priyorite:

- + ~ ~!

Unary mwens, unary plis, bit-wise NOT, lojik PA. Okenn nan sa yo operand yo ka aplike nan operasyon fisèl, ak bit-ki gen sans PA ka aplike sèlman nan nonm antye.

* /%

Miltipliye, divize, rès. Okenn nan sa yo operand yo ka aplike nan operasyon string, ak rès ka aplike sèlman nan nonm antye. Rès la ap toujou gen menm siy tankou divisò a ak yon valè absoli ki pi piti pase divisò a.

+ -

Add ak soustraksyon. Valab pou nenpòt ki operasyon nimerik.

<< >>

Left ak dwa chanjman. Valab pou nonb antye relatif sèlman. Yon chanjman dwa toujou pwopaje siyal la ti jan.

<> <=> =

Boolean mwens, pi gran, mwens pase oswa egal, ak pi gran pase oswa egal. Chak operatè pwodui 1 si kondisyon an se vre, 0 otreman. Operatè sa yo ka aplike nan strings kòm byen ke operasyon nimerik, nan ki se ka konparezon string itilize.

==! =

Boolean egal e pa egal. Chak operatè pwodui yon rezilta zewo / yon sèl. Valab pou tout kalite operand.

&

Bit-gen bon konprann ak. Valab pou nonb antye relatif sèlman.

^

Bit-gen bon konprann eksklizyon OSWA. Valab pou nonb antye relatif sèlman.

|

Bit-ki gen sans OSWA. Valab pou nonb antye relatif sèlman.

&&

Lojik AK. Pwodui yon rezilta 1 si tou de operand yo ki pa zewo, 0 otreman. Valab pou Boolean ak nimerik (nonm antye oswa k ap flote-pwen) opere sèlman.

||

Lojik OSWA. Pwodui yon rezilta 0 si tou de operand yo zewo, 1 otreman. Valab pou Boolean ak nimerik (nonm antye oswa k ap flote-pwen) opere sèlman.

x ? y : z

Si-Lè sa a,-lòt bagay, tankou nan C. Si x evalye a ki pa zewo, Lè sa a, rezilta a se valè y . Sinon, rezilta a se valè a nan z . Operand x la dwe gen yon valè nimerik.

Gade manyèl C a pou plis detay sou rezilta yo ki te pwodwi pa chak operatè. Tout moun nan operatè yo binè gwoup kite-a-dwa nan menm nivo priyorite. Pa egzanp, kòmandman an

Eksprès 4 * 2 <7

retounen 0.

&& , | , ak ?: Operatè yo gen "evalyasyon parese", menm jan ak C, ki vle di ke operand yo pa evalye si yo pa bezwen detèmine rezilta a. Pou egzanp, nan lòd la

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

se sèlman youn nan [a] oswa [b] aktyèlman ap evalye, depann sou valè $ v . Remak, sepandan, ke sa a se sèlman vre si ekspresyon an tout antye ki fèmen nan aparèy òtopedik; otreman, parser la Tcl pral evalye tou de [a] ak [b] anvan envoke lòd la expr .

Fonksyon Matematik

Tcl sipòte fonksyon sa yo matematik nan ekspresyon:

abs cosh boutèy sqrt acos doub log10 srand asin eks pow tan atan etaj rand tanh atan2 fmod wonn ceil hypot sin cos int sinh

abs ( disk )

Retounen valè absoli nan arg . Arg ka swa nonb antye oswa pwen k ap flote, epi rezilta a retounen nan menm fòm lan.

acos ( arg )

Retounen kosinè a arc nan arg , nan seri a [0, pi] radyan. Arg ta dwe nan seri a [-1,1].

asin ( aj )

Retounen sinis la nan arc, nan seri a [-pi / 2, pi / 2] radyan. Arg ta dwe nan seri a [-1,1].

atan ( disk )

Retounen tangent ar nan arg , nan seri a [-pi / 2, pi / 2] radyan.

atan2 ( x, y )

Retounen tangent la nan y / x , nan seri a [-pi, pi] radyan. x ak y pa ka tou de gen 0.

plafon ( agw )

Retounen pi piti valè nonb antye pa mwens pase arg .

kos ( disk )

Retounen kosinis nan arg , mezire nan radyan.

kosh ( aj )

Retounen kosin nan ipèrbalik nan arg . Si rezilta a ta lakòz yon debòde, se yon erè ki te retounen.

doub ( agw )

Si arg se yon valè k ap flote, retounen arg , otreman konvèti arg pou k ap flote epi retounen valè a konvèti.

eksp ( arg )

Retounen eksponansyèl la nan arg , defini kòm e ** arg . Si rezilta a ta lakòz yon debòde, se yon erè ki te retounen.

etaj ( arg )

Retounen valè a pi gwo entegral pa pi gran pase arg .

fmod ( x, y )

Retounen rès k ap flote nan divizyon x pa y . Si y se 0, yon erè retounen.

ipot ( x, y )

Kalkile longè hypotenuse a nan yon triyang ki gen dwa ( angajman x * x + y * y ).

int ( arg )

Si arg se yon valè enjenyè, retounen agar , otreman konvèti arg pou nonb antye ki pa twoncasyon epi retounen valè konvèti a.

log ( arg )

Retounen logaritm natirèl la nan arg . Arg dwe yon valè pozitif.

log10 (disk )

Retounen baz 10 logaritm nan arg . Arg dwe yon valè pozitif.

pow ( x, y )

Konpare valè x ki leve soti vivan nan pouvwa y la . Si x negatif, y dwe yon valè enjonksyon.

rand ()

Retounen yon nimewo pwen k ap flote nan zewo a jis mwens pase youn oswa, an tèm matematik, ranje a [0,1). Grenn lan soti nan revèy la entèn nan machin nan oswa yo ka mete manyèl ak fonksyon an srand.

wonn ( arg )

Si arg se yon valè nonb antye relatif, retounen agar , otreman konvèti arg pou integer pa awondi ak retounen valè a konvèti.

peche ( aj )

Retounen sinis la nan aj , mezire nan radyan.

sinh ( aj )

Retounen Sinema hyperbolic la nan arg . Si rezilta a ta lakòz yon debòde, se yon erè ki te retounen.

sqrt ( disk )

Retounen rasin kare a nan arg . Arg dwe pa negatif.

srand ( arg )

Agòch la , ki dwe yon nonb antye relatif, yo itilize Reyaji pitit pitit la pou dèlko a nimewo o aza. Retounen premye nimewo o aza soti nan ki pitit pitit. Chak entèprèt gen pwòp pitit pitit li yo.

tan ( aj )

Retounen tanjant lan nan aj , mezire nan radyan.

tanh ( aj )

Retounen tangent a hyperbolic nan arg .

Anplis fonksyon sa yo predefini, aplikasyon yo ka defini fonksyon adisyonèl lè l sèvi avèk Tcl_CreateMathFunc ().

Kalite, debri, ak presizyon

Tout kalkil entèn ki enplike antye antye yo fè ak kalite C a depi lontan , ak tout kalkil entèn ki enplike k ap flote-pwen yo fè ak tip C a doub . Lè konvèti yon fisèl nan k ap flote-pwen, se ekoulman debòde detekte ak rezilta nan yon erè Tcl. Pou konvèsyon nan nonb antye ki sòti nan fisèl, deteksyon nan debòde depann sou konpòtman an nan kèk woutin nan bibliyotèk la lokal C, se konsa li ta dwe konsidere kòm enfidèl. Nan nenpòt ka, integer debri ak underflow yo jeneralman pa detekte fiable pou rezilta entèmedyè. Flotan-pwen debòde ak underflow yo detekte nan degre ki te sipòte pa kenkayri a, ki se jeneralman trè serye.

Konvèsyon nan mitan reprezantasyon entèn pou nonb antye relatif, k ap flote-pwen, ak operasyon kòd se fè otomatikman jan sa nesesè. Pou kalkil aritmetik, nonm antye yo itilize jouk gen kèk nimewo k ap flote-pwen prezante, apre yo fin ki k ap flote-pwen yo itilize. Pa egzanp,

expr 5/4

retounen 1, pandan y ap

expr 5 / 4.0 ekspr 5 / ([longè kòd "abcd"] 0.0)

tou de retounen 1.25. Valè flotan pwen yo toujou retounen avèk yon `` . '' oswa yon e yo ke yo pa pral sanble valè enjenyè. Pa egzanp,

ekspr 20.0 / 5.0

retounen 4.0 , pa 4 .

Operasyon chèn

Valè chèn yo ka itilize kòm operasyon operatè konparezon yo, byenke evalyatè ekspresyon an ap eseye fè konparezon kòm nonb antye relatif oswa k ap flote-pwen lè li kapab. Si youn nan operand yo nan yon konparezon se yon fisèl ak lòt la gen yon valè nimerik, operasyon an nimerik konvèti tounen nan yon fisèl lè l sèvi avèk espesifik fòma C Sprintf a pou entyèr ak % g pou valè k ap flote pwen. Pou egzanp, kòmandman yo

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

tou de retounen 1. Se konparezon an premye fè lè l sèvi avèk nonb antye konparezon, ak dezyèm la se fè lè l sèvi avèk fisèl konparezon apre dezyèm operasyon an konvèti nan fisèl la 18 . Paske tandans Tcl a trete valè kòm chif yo nenpòt lè sa posib, li pa jeneralman yon bon lide pou itilize operatè tankou == lè ou reyèlman vle konparezon fisèl ak valè yo nan operand yo ta ka abitrè; li pi bon nan ka sa yo yo sèvi ak lòd la fisèl olye.

Konsiderasyon pèfòmans

Mete ekspresyon nan aparèy òtopedik pou vitès ki pi bon an ak kondisyon yo ki pi piti depo. Sa a pèmèt Tcl bytecode konpilateur nan jenere kòd la pi byen.

Kòm mansyone pi wo a, ekspresyon yo ranplase de fwa: yon fwa pa tcl parser la ak yon fwa pa lòd la expr . Pou egzanp, kòmandman yo

mete yon seri 3 b {$ a + 2} ekspr $ b * 4

retounen 11, pa yon miltip nan 4. Sa a se paske paryeur la Tcl pral ranplase premye $ a + 2 pou varyab b la , Lè sa a, eksprime lòd la ap evalye ekspresyon $ a + 2 * 4 .

Pifò ekspresyon pa egzije yon dezyèm seri sibstitisyon. Swa yo fèmen nan aparèy òtopedik oswa, si se pa, varyab yo ak ranplasman ranplasman sede nimewo oswa kòd ki pa tèt yo mande pou ranplasman. Sepandan, paske yon kèk ekspresyon unbraced bezwen de jij nan sibstitisyon, kontilye a bytecode dwe emèt lòt enstriksyon yo okipe sitiyasyon sa a. Kòd la pi chè mande pou ekspresyon unbraced ki gen ranplasman lòd. Sa yo ekspresyon yo dwe aplike pa génération nouvo kòd chak fwa ekspresyon an egzekite.

Mo kle

aritmetik, boolean , konpare, ekspresyon, konparezon mou

Enpòtan: Sèvi ak kòmandman an moun ( moun ) yo wè ki jan yon lòd yo itilize sou òdinatè patikilye ou.