Linux / Unix komandoa: expr

izena

expr - Ebaluatu adierazpena

Laburpena

expr arg ? arg arg ... ?

Arg argitzen du (haien arteko banako espazioak gehitzen ditu), emaitza Tcl adierazpen gisa ebaluatzen du, eta balioa itzultzen du. Tcl adierazpenetan baimendutako operadoreak C adierazpenetan baimendutako operadoreen azpimultzo bat dira, eta dagokien C operadoreen esanahia eta lehentasuna dute. Espresioak ia emaitza numerikoak (zenbaki osoak edo balio mugikorreko balioak) ematen dituzte beti. Esate baterako, adierazpena

expr 8.2 + 6

14.2 ebaluatzen du. Tcl adierazpenak C adierazpenetatik datozela adierazten dute operadoreak zehazten dituzten moduan. Era berean, Tcl adierazpenek ez dute zenbakizko operadoreak eta kateen konparazioak onartzen.

eragigaiak

Tcl adierazpena operadoreen, operadoreen eta parentesien konbinazioa da. Espazio zuria operadoreen eta operadoreen eta parentesien artean erabil daiteke; adierazpenaren jarraibideak baztertzen ditu. Ahal izanez gero, operadoreak osoko balio gisa interpretatuko dira. Zenbaki osoak zehaztu daitezke hamartarrak (kasu arruntak), zortzitarretan (operaren lehen karakterea 0 bada ) edo hexadecimalean (operadoreak lehen bi karaktereak 0x bada ). Operadoreak goian adierazitako osoko formatuetariko bat ez badago, puntu mugikorreko zenbaki gisa tratatuko da hori posible bada. Zenbaki mugikorreko zenbakiak ANSI betetzen duen C konpilatzailearen batek onartzen dituen edozein modutan zehaztu daitezke ( F , F , L eta L baimenetan ez dira onartzen instalazio gehienetan). Adibidez, honako hauek hauek dira: 2.1, 3., 6e4, 7.91e + 16 balioak. Zenbakizko interpretazioa posible ez bada, operako kate gisa utzi behar da (operadore multzo mugatu bat bakarrik aplikatu daiteke).

Operandak modu hauetako batean zehaztu daitezke:

[1]

Zenbaki-balioa, osokoa edo flotatzailea.

[2]

Tcl aldagai bezala, $ notazio estandarra erabiliz. Aldagaiaren balioa operan gisa erabiliko da.

[3]

Komatxo bikoitzetan agertzen den kate gisa. Espresio analizatzaileak barra-barra, aldagai eta ordezko ordezketak egingo ditu komatxoen artean, eta emaitza gisa balioko du operadoreak

[4]

Giltzailez osatutako katea. Giltza irekia eta hurbileko giltza arteko karaktereak ordezko inolako operan erabiliko dira.

[5]

Tcl komandoa parentesi artean dago. Komandoa exekutatu eta bere emaitza operan gisa erabiliko da.

[6]

Funtzio matematiko gisa, argumentuek operadoreen gainetik dauden formatuetako bat bezala, bekatua ($ x) adibidez. Ikusi beheko funtzio definituen zerrendara.

Ordezkapenak goian gertatzen direnean (esate baterako, kotizatutako kateak), adierazpenaren jarraibideak egiten dira. Hala ere, ordezko geruza gehigarria dagoeneko komando parser bidez egin daiteke adierazpen prozesatzailea deitu aurretik. Beheko eztabaidetan, komenigarria da parekatzeak edukietan ordeztea saihesteko.

Esamolde sinpleen adibide batzuk esan nahi baduzu, aldagaiak 3 balioa du eta aldagaiak b 6 balio du. Ondoren, beheko lerro bakoitzaren ezkerreko komandoak lerroaren eskuineko balioa sortuko du:

Exprime 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * [luzera "6 2"] 8 expr {{word one} <"hitza $ a"} 0

operadoreak

Baliogabeen operadoreak behean zerrendatzen dira, lehentasun ordena murriztuan sailkatuta:

- + ~!

Unary minus, unary plus, bit-wise NOT, logical NOT. Operadore horietako inork ez du kate operadoreei aplikatu, eta bit-jakintsua EZ da zenbaki osoarentzat soilik.

* /%

Biderkatu, zatitzea, gainerakoa. Operako hauetakoren bat korda-operadoreei aplikatu ahal zaie, eta gainerakoa zenbaki osoarentzat bakarrik aplikatu daiteke. Gainerakoak zatitzailea bezainbatean beti izango du zatitzaileak baino balio absolutuagoa.

+ -

Gehitu eta kendu. Zenbaki operadoreentzat balio du.

<< >>

Ezkerreko eta eskuineko aldaketa. Zenbaki osoko operadoreentzat bakarrik balio du. Eskuineko txanda beti zeinuaren bit zabaltzen da.

<> <=> =

Boolearra gutxiago, handiagoa, gutxiago edo berdina, eta handiagoa edo berdina. Operadore bakoitzak 1 sortzen du baldintza egiazkoa bada, bestela 0. Operadore hauek kateei eta zenbakizko operadoreei aplikatu ahal zaizkie, kasu horretan katearen konparaketa erabiltzen baita.

==! =

Boolear berdinak eta ez berdinak. Operadore bakoitzak emaitza zero / bat sortzen du. Baliogabea operako mota guztiei.

&

Bit-jakintsua AND. Zenbaki osoko operadoreentzat bakarrik balio du.

^

Bit-wise esklusiboa OR. Zenbaki osoko operadoreentzat bakarrik balio du.

|

Bit-jakintsua OR. Zenbaki osoko operadoreentzat bakarrik balio du.

&&

AND logikoa. 1 emaitza sortzen du bi operadore zero ez bada, bestela 0. Balio boolearrak eta zenbakizkoak (zenbaki osoak edo mugikorreko puntuak) soilik.

||

OR logikoa. 0 emaitza sortzen du bi operadoreak zero bada, bestela beste bat. Balio boolearrak eta zenbakizkoak (zenbaki osoak edo mugikorreko puntuak) soilik.

x ? y : z

Bada-gero-bestela, C. moduan. X ebaluatzen ez zero, orduan emaitza y balio da. Bestela, emaitza z- ren balioa da. X operandek balio numerikoa izan behar dute.

Ikus C eskuliburua operadore bakoitzeko emaitzei buruzko xehetasun gehiago lortzeko. Operadore bitar guztiek ezkerraldetik lehentasun maila bera dute. Adibidez, komandoa

expr 4 * 2 <7

0 itzultzen du.

The && , || , eta ?: operadoreak "alferrak ebaluazioa" du, C-en bezala, eta horrek esan nahi du operadoreak ez direla ebaluatu behar ez badira emaitza zehazteko. Adibidez, komandoan

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

[a] edo [b] bat bakarrik ebaluatuko dira, $ v-ren arabera . Kontuan izan, hala ere, hori egia bihurtzen dela adierazpen osoa giltzen artean; bestela, Tcl analizatzaileak [a] eta [b] ebaluatuko ditu expr komandoa deitzen aurretik.

Math funtzioak

Tcl funtzio matematikoak ondoko esamoldeetan onartzen ditu:

log koska log sqrt akos double log10 srand asin exp pow tan atan floor rand tanh atan2 fmod round ceil hypot sin cos int sinh

abs ( arg )

Arg argumentuaren balio absolutua itzultzen du. Arg bai osokoa edo mugikorreko puntua izan daiteke, eta emaitza forma berdinean itzuliko da.

acos ( arg )

Arg argineko arku kosinua itzultzen du, [0, pi] radianetan. Arg izan behar du barrutian [-1,1].

asin ( arg )

Arku sin arku itzultzen du, [-pi / 2, pi / 2] radian barrutian. Arg izan behar du barrutian [-1,1].

atan ( arg )

Arg arkuztizko tangentea itzultzen du, [-pi / 2, pi / 2] radian barrutian.

atan2 ( x, y )

Y / x arkutangentea itzultzen du, [-pi, pi] radianoko barrutian. x eta y ezin dira biak izan 0.

ceil ( arg )

Arg arrunta baino txikiagoa den zenbaki baliogabea itzultzen du.

cos ( arg )

Argien kosinua itzultzen du, radianetan neurtuta.

cosh ( arg )

Arg argumentu hiperbolikoa itzultzen du. Emaitza desbideratze bat gertatuko balitz, errore bat itzuliko da.

bikoitza ( arg )

Arg balio mugikorra bada, arg itzultzen du, bestela arg bihurtzen du flotatzen eta bihurtzen den balioa itzultzen du.

exp ( arg )

Arg argal esponentziala itzultzen du, ** arg ** bezala definituta. Emaitza desbideratze bat gertatuko balitz, errore bat itzuliko da.

solairua ( arg )

Arg argia baino handiagoa ez den balio integral handiena ematen du.

fmod ( x, y )

X-ren arabera zatitzen duen zatitzaile mugikorreko puntua itzultzen du. 0 bada y , errore bat itzuli da.

hipot ( x, y )

Hiru angelu angeluzuzenaren hipotenusa ( x * x + y * y ) luzera kalkulatzen du.

int ( arg )

Arg osotasunaren balioa bada, arg itzultzen du, bestela arg bihurtzen du trunketa osotik eta bihurtzen den balioa itzultzen du.

log ( arg )

Arg argumentu logaritmo naturala itzultzen du. Arg balio positiboa izan behar du.

log10 ( arg )

Arg argumentuaren oinarrizko 10 logaritmak itzultzen ditu. Arg balio positiboa izan behar du.

pow ( x, y )

X- ren balioa kalkulatzen du potentzia y-rekin . X bada negatiboa bada, y osoko zenbaki bat izan behar da.

rand ()

Zenbakiaren puntu mugikorreko zenbaki bat itzultzen du bat baino gutxiago edo, matematikoan, barrutia [0,1]. Hazia makina barruko erlojutik dator edo eskuzko sorta funtzioarekin ezarri daiteke.

txandan ( arg )

Arg osoko balio bat bada, arg itzultzen du, bestela arg bihurtzen du osoko biribilketak eta bihurtutako balioa itzultzen du.

sin ( arg )

Arginaren sinua itzultzen du, radianetan neurtuta.

sinh ( arg )

Arg argumentu hiperbolikoa itzultzen du. Emaitza desbideratze bat gertatuko balitz, errore bat itzuliko da.

sqrt ( arg )

Arg argumentuaren erro karratua ematen du. Arg ez negatiboa izan behar du.

srand ( arg )

Arg , osoko zenbaki bat izan behar da, ausazko zenbaki sortzailea sortzeko hazia berrezarriko da. Hazi horren lehenengo ausazko zenbakia itzultzen du. Interprete bakoitzak bere hazia du.

tan ( arg )

Arg radarraren tangentea itzultzen du.

tanh ( arg )

Arg argumentu hiperbolikoa itzultzen du.

Aurredefinitutako funtzioez gain, aplikazioek funtzio osagarriak definitu ditzakete Tcl_CreateMathFunc () erabiliz.

Tipoak, gainezkatzea eta zehaztasuna

Zenbaki osoko barne-konputazio guztiak C motako luzearekin egiten dira , eta mugikorreko puntua barne hartzen duten barne-konputazio guztiak C motako bikoitzarekin egiten dira . Kate bat flotatzailetik bihurtzen denean, azalpen isurketa detektatuko da eta Tcl errore bat gertatuko da. Kate batetik zenbaki osora bihurtzeko, desbordaketak detektatzeko tokiko C liburutegiko zenbait errutinaren portaeraren araberakoa da, beraz, ez da fidagarria. Edonola ere, osoko biltegiratzeak eta beheko fluxuak ez dira, oro har, errendimendu ertainekoak fidagarri aurkitzen. Mugikorreko gainezkatze eta beheko fluxua hardwareak onartzen dituen mailara detektatu dira, normalean fidagarriak.

Barne errepresentazioen arteko bihurketa osoko, mugikorreko eta kate eragileen artean automatikoki egiten da behar bezala. Konputazio aritmetikoetarako, zenbakiak zenbaki mugikorreko zenbaki bat sartu arte erabiltzen dira, eta horren ondoren korronte puntua erabiltzen da. Adibidez,

5/5 expr

itzultzen 1, berriz

expr 5 / 4.0 expr 5 / ([kate luzera "abcd"] + 0.0)

biak itzuli 1.25. Balio mugikorreko balioak `` betirako itzuli ohi dira . '' edo e bat, beraz, ez dira osoko balioen itxura izango. Adibidez,

expr 20.0 / 5.0

4.0 itzultzen du, ez 4 .

String Operations

String balioak konparazio operadoreen operadore gisa erabil daitezke, nahiz eta adierazle ebaluatzaileak konparazioak osoko edo mugikorreko puntuak egiten dituen. Konparazioko operadoreetako bat kate bat bada eta bestea zenbakizko balio bat badago, zenbakizko operadoreak kate bihurtuko du C sprintf formatuaren % d specifier zehatza eta % g puntu mugikorreko balioentzat. Esate baterako, komandoak

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

Bi itzuli 1. Lehenengo konparazioa osoko konparaketa erabiliz egiten da eta bigarrena kate konparaketa erabiliz egin da bigarren operan, kateari bihurtzen zaio 18 . Tclen balioak zenbakiak ahalik eta gehien tratatzeko tendentzia dela eta, ez da normalean ideia ona, hala nola, == operadoreak erabiltzea, kateen konparazioa nahi baduzu eta operadoreen balioak arbitrarioak izan litezkeela; hobe da kasu hauetan komandoaren katea erabiltzea ordez.

Performancearen gogoetak

Entzute adierazpenak gezi batean abiadura handienean eta biltegiratze eskakizun txikienean. Honek aukera ematen du Tcl bytecode konpiladoreari kode onena sortzeko.

Goian aipatu bezala, esamoldeak bi aldiz aldatu dira: Tcl analizatzailea behin eta behin expr komandoa. Esate baterako, komandoak

ezarri 3 set b {$ a + 2} expr $ b * 4

itzuli 11, ez bat baino gehiago 4. Honek Tcl analizatzaileak lehenik eta behin aldatuko du $ a + 2 b aldagaian, orduan expr komandoak $ a + 2 * 4 adierazpena ebaluatuko du.

Esamolde gehienek ez dute ordezko bigarren saio bat behar. Giltza artean ageri dira edo, bestela, aldagaiak eta komandoak ordezten badituzte, ordezkapenik behar ez duten zenbakiak edo katea ematen dute. Hala eta guztiz ere, unbraced adierazpen batzuk ordezkapen bi errondak behar dituzte, bytecode konpiladoreak argibide gehiago eman behar ditu egoera hori kudeatzeko. Kode garestiagoak komando ordezkoak dituen adierazpen desbideratuetarako beharrezkoa da. Esamolde horiek inplementatu behar dira kode berria sortuz, adierazpena exekutatzen den bakoitzean.

Keywords

aritmetika, boolearra , alderatzea, adierazpena, konparazio fuzzya

Garrantzitsua: erabili man komandoa ( % man ) komando bat nola erabiltzen den zure ordenagailuan.