Linux / Unix komanda: expr

Nosaukums

expr - Izvērtējiet izteicienu

Kopsavilkums

expr arg ? arg arg ... ?

Concatenates arg 's (pievienojot separatora atstarpes starp tām), novērtē rezultātu kā Tcl izteiksmi un atgriež vērtību. Operatori, kuriem atļauts izmantot TCL izteiksmes, ir operatoru apakškopa, kas atļauti C izteiksmēs, un tiem ir tāda pati nozīme un prioritāte kā attiecīgajiem C operatoriem. Izteiksmes gandrīz vienmēr dod skaitliskus rezultātus (veseli skaitļi vai peldošā komata vērtības). Piemēram, izteiksme

expr 8.2 + 6

novērtē līdz 14,2. Tcl izteicieni atšķiras no C izteicieniem tā, kā tiek norādīti operandi. Arī Tcl izteiksmes atbalsta ciparu operandus un virkņu salīdzinājumus.

Operands

Tcl izteiksme sastāv no operandu, operatoru un iekavu kombinācijas. Starp operandēm un operatoriem un iekavās var izmantot balto laukumu; to ignorē izteiciena norādījumi. Ja iespējams, operandi tiek interpretēti kā veseli skaitļi. Integer vērtības var norādīt ar decimāldaļu (normālā gadījumā), astotajā (ja operandes pirmais raksturs ir 0 ) vai heksadecimālajā (ja operandes pirmās divas rakstzīmes ir 0x ). Ja operandam nav neviena no iepriekš norādītajiem veselo skaitļu formātiem, ja tas ir iespējams, tas tiek uzskatīts par peldošā komata numuru. Peldošo punktu skaitu var norādīt kādā no veidiem, kurus pieņēmusi ANSI saderīgs C kompilators (izņemot to, ka fosfāzes , f , l un L sufiksi vairumā instalāciju netiks atļauti). Piemēram, visi šie ir derīgi peldošā komata numuri: 2.1, 3., 6e4, 7.91e + 16. Ja skaitliska interpretācija nav iespējama, operands tiek atstāts kā virkne (un uz to var attiecināt tikai ierobežotu operatoru kopu).

Operandi var norādīt kādā no šiem veidiem:

[1]

Kā skaitliskā vērtība, vai nu vesels skaitlis vai peldošā komata vērtība.

[2]

Kā Tcl mainīgais, izmantojot standarta $ apzīmējumu. Mainīgā vērtība tiks izmantota kā operands.

[3]

Kā virkne, kas ir iekļauta dubultās pēdiņās. Paradīzes parsētājs izpildīs informācijas par ceturtdaļām backslash, mainīgo un komandu aizvietojumus un izmantos iegūto vērtību kā operandu

[4]

Kā virkne, kas piestiprināta lencēm. Parametrus starp atvērtām lencēm un atbilstošu tuvu lentu izmantos kā operandu bez jebkādiem aizstājējiem.

[5]

Kā TCL komandu pievieno iekavās. Komandu izpildīs, un tā rezultāts tiks izmantots kā operands.

[6]

Kā matemātiska funkcija, kuru argumentiem ir kāda no iepriekšminētajām formām operandēm, piemēram, sin ($ x) . Tālāk skatiet definēto funkciju sarakstu.

Ja aizvietojumi notiek iepriekš (piemēram, iekšā citēto virknes), tās tiek izpildītas pēc izteiciena norādījumiem. Tomēr komandas parsētājs pirms izteiciena procesora izsaukuma varēja veikt papildu aizstāšanas slāni. Kā aprakstīts turpmāk, parasti vislabāk ir pievienot apzīmējumus lencēm, lai nepieļautu komandu parsētājs veikt satura aizstāšanu.

Daži vienkāršu izteicienu piemēri, pieņemot, ka mainīgais a ir vērtība 3, un mainīgajam lielumam b ir vērtība 6. Tad komanda katrā kreisajā pusē zem katras rindiņas izveidos vērtību rindas labajā pusē:

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

Operatori

Turpmāk uzskaitīti derīgie operatori, sagrupēti prioritārā secībā:

- + ~!

Unary minus, unary plus, bit-wise NOT, loģiski NOT. Nevienu no šiem operandiem nevar pielietot virknes operandiem, bet nedaudz - NOT var tikt piemērots tikai veseliem skaitļiem.

* /%

Reizināt, sadalīt, atlikušo daļu. Nevienu no šiem operandiem nevar piemērot stīgu operandiem, un atlikumu var piemērot tikai veseliem skaitļiem. Pārējā daļā vienmēr būs tāda pati zīme kā dalītājam un absolūtā vērtība, kas mazāka par dalītāju.

+ -

Pievienot un atņemt. Derīgs visiem ciparu operandiem.

<< >>

Kreisā un labā maiņa. Derīgs tikai veseliem skaitļiem. Tiesības maiņa vienmēr pavada zīmes bitu.

<> <=> =

Būla vērtība ir mazāka, lielāka, mazāka vai vienāda un lielāka vai vienāda. Katrs operators producē 1, ja nosacījums ir taisnība, 0 citādi. Šie operatori var tikt pielietoti virknēm, kā arī skaitliskiem operandiem, un tādā gadījumā tiek izmantots stīgu salīdzinājums.

==! =

Būla vienāds un nav vienāds. Katrs operators producē nulli / vienu rezultātu. Derīgs visiem operandu veidiem.

&

Bit-wise AND. Derīgs tikai veseliem skaitļiem.

^

Bit ekskluzīvs ekskluzīvs VAI. Derīgs tikai veseliem skaitļiem.

|

Bit-wise OR. Derīgs tikai veseliem skaitļiem.

&&

Loģiski un. Izveido 1 rezultātu, ja abi operandi nav nulles, pretējā - 0. Derīgs tikai boolean un skaitliskiem (veseliem vai peldošiem punktiem) operandiem.

||

Loģiski OR. Izveido 0 rezultātu, ja abiem operandiem ir nulle, 1 citādi. Derīgs tikai boolean un skaitliskiem (veseliem vai peldošiem punktiem) operandiem.

x y : z

Ja-tad-else, tāpat kā C. Ja x vērtē kā nulli, tad rezultāts ir y vērtība. Pretējā gadījumā rezultāts ir z vērtība. X operandam jābūt skaitliskai vērtībai.

Plašāku informāciju par katra operatora sniegtajiem rezultātiem skatiet C rokasgrāmatā. Visu bināro operatoru grupa no kreisās uz labo tajā pašā prioritātes līmenī. Piemēram, komanda

expr 4 * 2 <7

atgriež 0

&& , || , un ?: operatoriem ir `` slinks novērtējums '', tāpat kā C, kas nozīmē, ka operandi nav novērtēti, ja tie nav vajadzīgi, lai noteiktu rezultātu. Piemēram, komandā

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

faktiski tiks novērtēts tikai viens no [a] vai [b] , atkarībā no vērtības $ v . Tomēr ņemiet vērā, ka tas ir tikai taisnība, ja visa izteiksme ir ietverta lencēm; pretējā gadījumā Tcl parsētājs novērtēs gan [a], gan [b] pirms expr komandas izmantošanas.

Matemātikas funkcijas

Izteiksmē Tcl atbalsta šādas matemātiskās funkcijas:

abs cosh log sqrt acos dubultā log10 srand asin exp pow tan atan grīdas rand tanh atan2 fmod apaļais ceil hipot grin cos int sinh

abs ( arg )

Atgriež arg absolūto vērtību. Arg var būt vai nu vesels vai peldošs punkts, un rezultāts tiek atgriezts tajā pašā formā.

acos ( arg )

Atgriež arg loku arg , diapazonā [0, pi] radians. Arg jābūt diapazonā [-1,1].

asin ( arg )

Atgriež Arg argine sine diapazonā [-pi / 2, pi / 2] radians. Arg jābūt diapazonā [-1,1].

atan ( arg )

Atgriež arg šķautnes pieskari ar diapazonu [-pi / 2, pi / 2] radians.

atan2 ( x, y )

Atgriež loka tangensu no y / x diapazonā [-pi, pi] radians. x un y nevar abus būt 0.

ceil ( arg )

Atgriež mazāko veselo skaitli, kas nav mazāks par arg .

cos ( arg )

Atgriež argins kosinusu, mērot radianos.

cosh ( arg )

Atgriež arg formu hiperbolisko cosinus . Ja rezultāts varētu izraisīt pārplūdi, tiek atgriezta kļūda.

dubultā ( arg )

Ja arg ir peldošā vērtība, atgriež arg , citādi pārvērš arg uz peldošo un atgriež pārveidoto vērtību.

exp ( arg )

Atgriež arg argumentu , kas definēts kā e ** arg . Ja rezultāts varētu izraisīt pārplūdi, tiek atgriezta kļūda.

grīda ( arg )

Atgriež lielāko integrālo vērtību, kas nav lielāka par arg .

fmod ( x, y )

Atgriež pārejošo punktu atlikumu no sadalījuma x ar y . Ja y ir 0, tiek atgriezta kļūda.

hipotēka ( x, y )

Aprēķina taisnleņķa trijstūra hipotenūza garumu ( x * x + y * y ).

int ( arg )

Ja arguments arg ir vesels skaitlis, atgriež arg , citādi pārvērš arg līdz veselam skaitlim, izmantojot saīsināšanu, un atgriež pārveidoto vērtību.

log ( arg )

Atgriež kodola logaritmu arg . Arg jābūt pozitīvai vērtībai.

log10 ( arg )

Atgriež arg logaritmu 10 pamata. Arg jābūt pozitīvai vērtībai.

pow ( x, y )

Aprēķina vērtību x, kas paaugstināts līdz jaudai y . Ja x ir negatīvs, y jābūt veselam skaitlim.

rand ()

Atgriež peldošā komata skaitli no nulles līdz tikai mazāk par vienu vai, matemātiskā izteiksmē, diapazonu [0,1]. Sēklas nāk no iekārtas iekšējā pulksteņa vai arī var iestatīt manuāli ar srand funkciju.

apaļa ( arg )

Ja arg ir vesels skaitlis, atgriež arg , citādi pārvērš arg uz veselu skaitli, noapaļojot un atgriež konvertēto vērtību.

grēks ( arg )

Atgriež sin sinusu, mērot radianos.

sinh ( arg )

Atgriež arg formu hiperbolisko sinusu. Ja rezultāts varētu izraisīt pārplūdi, tiek atgriezta kļūda.

sqrt ( arg )

Atgriež arg argumentu kvadrāta sakni. Arg nedrīkst būt negatīvs.

srand ( arg )

Arg , kas ir vesels skaitlis, tiek izmantots, lai atjaunotu nejaušo skaitļu ģeneratora sēklu. Atgriež pirmo nejaušo skaitli no šīs sēklas. Katram mutiskajam tulkam ir savas sēklas.

tan ( arg )

Atgriež argumentu arg , mērot radians.

tanh ( arg )

Atgriež hiperbolisko tangensu arg .

Papildus šīm iepriekš noteiktajām funkcijām programmas var definēt papildu funkcijas, izmantojot Tcl_CreateMathFunc ().

Veidi, pārplūde un precizitāte

Visi iekšējie aprēķini, kuros ir veseli skaitļi, tiek izpildīti ar C tipa garu , un visi iekšējie aprēķini, kas ietver peldošo punktu, tiek veikti ar C tipa dubultu . Pārvēršot virkni uz peldošo punktu, tiek konstatēts eksponentu pārpildījums un rodas Tcl kļūda. Pārvēršanai par veselu skaitli no virknes pārtvēruma noteikšana ir atkarīga no dažu parasto darbību veikšanas vietējā C bibliotēkā, tādēļ to vajadzētu uzskatīt par neuzticamu. Jebkurā gadījumā parasto skaitļu pārslodze un nepietiekama plūsma parasti nav droši nosakāma starpproduktu rezultātos. Pārplūstošās vietas pārplūde un zemfrekvences tiek noteiktas tādā apmērā, kādu atbalsta aparatūra, kas parasti ir diezgan uzticama.

Konvertēšana starp iekšējiem attēlojumiem par integer, peldošā komata un string operands tiek veikta automātiski, ja nepieciešams. Aritmētiskajiem aprēķiniem tiek izmantoti veseli skaitļi, līdz tiek ieviests zināms peldošā komata skaitlis, pēc kura tiek izmantots peldošā komata skaitlis. Piemēram,

expr 5/4

atgriež 1, kamēr

expr 5 / 4.0 expr 5 / ([virknes garums "abcd"] + 0.0)

abi atgriežas 1,25. Peldošo punktu vērtības vienmēr tiek atgrieztas ar `` . '' vai e, lai tie neizskatās kā veseli skaitļi. Piemēram,

expr 20.0 / 5.0

atgriež 4,0 , nevis 4 .

Stīgu operācijas

String vērtības var tikt izmantotas kā salīdzināšanas operatoru operandes, lai gan izteiksmes vērtētājs mēģina veikt salīdzinājumus kā vesels vai peldošs punkts, kad tas ir iespējams. Ja viens no salīdzināšanas operandiem ir virkne, bet otrai - ciparu vērtība, ciparu operands tiek pārveidots atpakaļ uz virkni, izmantojot C sprintf formāta specifikāciju % d par veseliem skaitļiem un % g - peldošās vērtības punktus. Piemēram, komandas

expr ("0x03"> "2") expr ("0y" <"0x12")

abas atgriešanās 1. Pirmais salīdzinājums tiek veikts, izmantojot veselu skaitļu salīdzinājumu, un otrais tiek darīts, izmantojot virknes salīdzinājumu pēc tam, kad otrais operands tiek pārveidots par 18. virkni. Sakarā ar Tcl tendenci vērtēt vērtības kā skaitļus, kad vien tas ir iespējams, parasti nav pareizi izmantot operatorus, piemēram, ==, ja jūs patiešām vēlaties virkņu salīdzināšanu un operandu vērtības varētu būt patvaļīgas; šajos gadījumos labāk ir izmantot virknes komandu.

Veiktspējas apsvērumi

Pievienojiet izteiksmes breketēs, lai iegūtu vislabāko ātrumu un mazākās uzglabāšanas prasības. Tas ļauj Tcl baitu koda kompilatoram ģenerēt vislabāko kodu.

Kā minēts iepriekš, izteiksmes tiek aizstātas divreiz: vienu reizi ar Tcl parsētājs un vienu reizi ar expr komandu. Piemēram, komandas

iestatīt 3 set b {$ a + 2} expr $ b * 4

atgriešanās 11, nevis 4 reizes. Tas ir tāpēc, ka Tcl parsētājs vispirms aizstāj mainīgo b vērtību $ a + 2 , tad expr komanda novērtēs izteiksmi $ a + 2 * 4 .

Lielākajai daļai izteiksmju nav nepieciešams otrais aizstāšanas kārta. Vai nu tie ir pievienoti bikštumos vai, ja nē, to mainīgo un komandu aizvietojumi dod skaitļus vai virknes, kurām pašiem nav jāmaina. Tomēr, tā kā dažiem nesaistītiem izteicieniem ir nepieciešami divi aizvietošanas posmi, bytekoda kompilatoram jāizdod papildu norādījumi, lai apstrādātu šo situāciju. Visdārgākais kods ir nepieciešams nesaistītām izteiksmēm, kurās ir komandu aizvietojumi. Šie izteicieni jāievieš, ģenerējot jaunu kodu ikreiz, kad izteiksme tiek izpildīta.

Atslēgvārdi

aritmētika, boolean , salīdzināt, izteiksme, izplūdušais salīdzinājums

Svarīgi: izmantojiet vīriešu komandu ( % man ), lai redzētu, kā komanda tiek izmantota jūsu konkrētajā datorā.