Linux / Unix հրաման

Անուն

expr - Գնահատեք արտահայտություն

Սինոփսիս

expr arg ? arg arg ... ?

Concatenates arg (նրանց միջեւ անջատիչ տարածքների ավելացում), գնահատվում է որպես Tcl արտահայտություն, եւ վերադարձնում է արժեքը: Tcl արտահայտություններում թույլատրված օպերատորները C արտահայտություններում թույլատրված օպերատորների ենթաբազմություն են եւ ունեն նույն իմաստը եւ նախորդությունը, որպես համապատասխան C օպերատոր: Արտահայտությունները գրեթե միշտ զիջում են թվային արդյունքներ (ամբողջական կամ լողացող միավոր արժեքներ): Օրինակ, արտահայտությունը

արտահայտություն 8.2 + 6

գնահատվում է 14.2: Tcl արտահայտությունները տարբերվում են C արտահայտություններից այնպես, որ գործում են գործառույթները: Բացի այդ, Tcl արտահայտությունները աջակցում են ոչ թվային operands եւ string համեմատություններ:

Գործողություններ

A Tcl արտահայտությունը բաղկացած է գործառույթների, օպերատորների եւ փակագծերի համադրությունից: Սպիտակ տարածքը կարող է օգտագործվել operand- ի եւ օպերատորների եւ փակագծերի միջեւ: այն անտեսվում է արտահայտության հրահանգներով: Հնարավորության դեպքում գործոնները մեկնաբանվում են որպես ամբողջական արժեքներ: Համընդհանուր արժեքները կարող են սահմանվել տասնորդական (սովորական դեպքում), octal- ի դեպքում (եթե գործողության առաջին բնույթը 0 է ) կամ տասնութերորդ (եթե առաջինի երկու նիշերը 0x են ): Եթե ​​գործառույթը չունի վերը նշված ամբողջական ձեւաչափերից մեկը, ապա դա հնարավոր է, եթե դա հնարավոր է լողացող կետի թվով: Լողացող կետերի թվերը կարող են սահմանվել ANSI- ի համատեղելի C կազմողի կողմից ընդունված ցանկացած եղանակով (բացառությամբ այն, որ f , F , l- ը եւ L- ի վերջնակները թույլ չեն տա շատ տեղադրություններում): Օրինակ, բոլորն են վավերական լողացող կետերի թվերը `2.1, 3., 6e4, 7.91e + 16: Եթե ​​թվային մեկնաբանություն հնարավոր չէ, ապա օպերանդը թողարկվում է որպես տող (եւ կարող է կիրառվել միայն օպերատորների սահմանափակ քանակությամբ):

Գործողությունները կարող են նշված լինել հետեւյալ եղանակներից որեւէ մեկով.

[1]

Որպես թվային արժեք, կամ integer կամ լողացող կետ:

[2]

Որպես Tcl փոփոխական, օգտագործելով ստանդարտ $ նշում: Փոփոխական արժեքը կօգտագործվի որպես operand:

[3]

Որպես երկակի մեջբերումներում զետեղված տող: Արտահայտիչ parser- ը կկատարի վերարկուներ, փոփոխական եւ գրավիչ փոխարինումներ, մեջբերումների միջեւ տեղեկատվության վրա, եւ օգտագործելով արդյունքի արժեքը `որպես գործողության

[4]

Որպես սալիկապատված տողեր: Բաց կոճղի եւ համընկնող փակ կոճղի միջեւ հերոսները կօգտագործվեն որպես տոմանդ առանց որեւէ փոխարինման:

[5]

Որպես TCL հրաման, փակված փակագծերում: Հրամանը կկատարվի եւ դրա արդյունքը կօգտագործվի որպես օպերան:

[6]

Որպես մաթեմատիկական գործառույթ, որի փաստարկներն ունեն գործառույթների վերոհիշյալ ձեւեր, ինչպիսիք են մեղքը ($ x) : Տեսեք ստորեւ նշված գործառույթների ցանկը:

Եթե ​​վերը նշվածները վերը նշված են (օրինակ, մեջբերված տողերի մեջ), դրանք կատարվում են արտահայտության հրահանգներով: Այնուամենայնիվ, փոխարինման հավելյալ շերտը կարող է իրականացվել հրամանատարության վերլուծիչի կողմից մինչեւ արտահայտման պրոցեսորը կոչվել: Ստորեւ ներկայացված է, սովորաբար, լավագույնն է ամրացնել արտահայտությունները բծերի մեջ, կանխելու հրամանատարության վերլուծիչի բովանդակության կատարման փոխարինումը:

Պարզ արտահայտությունների որոշ օրինակներ համար ենթադրենք, ա փոփոխականն ունի արժեքը 3, իսկ փոփոխական բը ունի 6 արժեքը: Այնուհետեւ ստորեւ յուրաքանչյուր տողերի ձախ կողմում հրաման կստեղծի գծի աջ կողմում արժեքը.

expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * [երկար "6 2"] 8 արտահայտություն {{բառը մեկ} <"բառը $ a"} 0

Օպերատորներ

Վավեր գործող օպերատորները թվարկված են ստորեւ, խմբավորված ըստ նվազման կարգի նախորդության:

- + ~!

Unary մինուս, unary գումարած, քիչ իմաստուն, տրամաբանական ՉԻ: Այս գործառույթներից ոչ մեկը չի կարող կիրառվել լարային գործոնների համար, եւ քիչ հավանական չէ, որ կիրառվի միայն թվերի համար:

* /%

Շատ, բաժանեք, մնացորդ: Այս գործառույթներից ոչ մեկը չի կարող կիրառվել string operands, իսկ մնացորդը կարող է կիրառվել միայն ամբողջ թվերով: Մնացածը միշտ նույն նշանն է, ինչպես բաժանողը եւ բացարձակ արժեքը, փոքրից, քան բաժանողը:

+ -

Ավելացնել եւ հանել: Վավերական է ցանկացած թվային օպերան:

<< >>

Ձախ եւ աջ հերթափոխ: Վավերական է ամբողջական գործառույթների համար: Ճիշտ տեղաշարժը միշտ տարածում է նշանի բիթը:

<> <=> =

Boolean պակաս, մեծ, պակաս կամ հավասար, եւ ավելի մեծ կամ հավասար: Յուրաքանչյուր օպերատոր արտադրում է 1, եթե պայմանը ճիշտ է, այլապես 0: Այս օպերատորները կարող են կիրառվել տողերի, ինչպես նաեւ թվային operand- ների, որոնց դեպքում օգտագործվում է լարային համադրություն:

==! =

Boolean հավասար եւ ոչ հավասար: Յուրաքանչյուր օպերատոր արտադրում է զրոյական / մեկ արդյունք: Բոլոր գործոնների համար վավեր է:

Եւ

Բի-բեն-դե եւ. Վավերական է ամբողջական գործառույթների համար:

^

Bit-wise բացառիկ OR- ը: Վավերական է ամբողջական գործառույթների համար:

| |

Bit-wise OR- ը: Վավերական է ամբողջական գործառույթների համար:

&&

Տրամաբանական AND. Արտադրում է 1 արդյունք, եթե երկուսն էլ գործում են ոչ զրո, 0: Վավերական է boolean եւ numeric (integers կամ լողացող կետ) operands միայն.

||

Տրամաբանական OR. Արտադրում է 0 արդյունք, եթե երկու գործառույթներն էլ զրո են, 1-ը, այլապես: Վավերական է boolean եւ numeric (integers կամ լողացող կետ) operands միայն.

x y : z

Եթե-ապա-else, ինչպես C- ում: Եթե x- ը գնահատում է ոչ զրոյի, ապա արդյունքը y- ի արժեքն է: Հակառակ դեպքում արդյունքը z- ի արժեքն է: X operand- ը պետք է ունենա թվային արժեք:

Տեսեք C ձեռնարկը յուրաքանչյուր օպերատորի կողմից ներկայացված արդյունքների վերաբերյալ մանրամասն մանրամասների համար: Բոլոր երկուական օպերատորների խումբը նույն նախադեպային մակարդակում ձախից աջ է: Օրինակ, հրամանը

expr 4 * 2 <7

վերադարձնում է 0:

The && , || , եւ ` օպերատորները` «ծույլ գնահատական», ինչպես C- ում, ինչը նշանակում է, որ գործառույթները չեն գնահատվում, եթե դրանք անհրաժեշտ չեն որոշելու արդյունքը: Օրինակ, հրամանատարության մեջ

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

[a] կամ [b] -ի միայն մեկը կգնահատվի, կախված $ v . Նշենք, սակայն, որ դա ճիշտ է, եթե ամբողջ արտահայտությունը կցվում է braces; հակառակ դեպքում, Tcl պերսեռը գնահատելու է [a] եւ [b] նախքան հրամանատարությունը հրավիրելը:

Մաթեմատիկայի գործառույթներ

Tcl- ն աջակցում է հետեւյալ մաթեմատիկական գործառույթներին.

abs cosh log sqrt acos երկկողմանի log10 սնուցձուկ էժան սպիտակ տատան հատակն rand tanh atan2 fmod round ceil hypot sin cos int sinh

abs ( arg )

Վերադարձնում է arg- ի բացարձակ արժեքը: Արգը կարող է լինել ամբողջական կամ լողացող կետ, եւ արդյունքը վերադարձվում է նույն ձեւով:

ակոս ( arg )

Վերադարձնում է arg arc կոսինե, միջակայքում [0, pi] radians. Արգը պետք է լինի [-1,1] տիրույթում:

asin ( arg )

Վերադարձնում է arc sine- ը arg- ի, [-pi / 2, pi / 2] ռադիաններում: Արգը պետք է լինի [-1,1] տիրույթում:

atan ( arg )

Վերադարձնում է arg- ի շղթայի տեգը , [-pi / 2, pi / 2] ռադիաններում:

atan2 ( x, y )

Վերադարձնում է y / x- ի արկը, [-pi, pi] ռադիաններում: x եւ y չեն կարող լինել 0:

առավոտյան ( ar )

Վերադարձնում է նվազագույն ամբողջական արժեքը ոչ պակաս arg .

cos ( arg )

Վերադարձնում է արգանակի կոսինեը , որը չափվում է ռադիաններում:

կոշ ( arg )

Վերադարձնում է arg- ի հիպերբոլիկ կոսին : Եթե ​​արդյունքը կարող է լցվել, ապա վերադարձվում է սխալ:

կրկնակի ( arg )

Եթե arg- ը լողացող արժեք է, վերադարձնում է arg , հակառակ դեպքում վերափոխվում է լողացող եւ վերադարձնում է փոխարկվող արժեքը:

exp ( arg )

Վերադարձնում է arg- ի էքսպոնենցիան, որը սահմանվում է որպես e ** arg : Եթե ​​արդյունքը կարող է լցվել, ապա վերադարձվում է սխալ:

հատակ ( arg )

Վերադարձնում է առավել մեծ ինտեգրալ արժեքը, ոչ ավելի, քան arg :

fmod ( x, y )

Վերադարձնում է x- ի բաժանման լողացող կետի մնացորդը: Եթե y- ը 0 է, սխալ է վերադարձվում:

հիպոթեք ( x, y )

Հաշվում է աջ անկյունավոր եռանկյունի հիպոթենուսի երկարությունը ( x * x + y * y ):

int ( arg )

Եթե arg- ը հանդիսանում է ամբողջական արժեք, վերադարձնում է arg , հակառակ դեպքում վերափոխում է ամբողջը `վերադարձով եւ վերադարձնում է փոխարկվող արժեքը:

մուտք ( arg )

Վերադարձնում է arg- ի բնական լոգարիթմը: Արգը պետք է լինի դրական արժեք:

log10 ( arg )

Վերադարձնում է բազայի 10 բազարի տրամաբանությունը: Արգը պետք է լինի դրական արժեք:

pow ( x, y )

Հաշվում է x- ի բարձրացված արժեքի արժեքը: Եթե x- ը բացասական է, y- ը պետք է լինի ամբողջական արժեք:

rand ()

Վերադարձնում է լողացող կետի համարը զրոյից մինչեւ պակաս, քան մեկ կամ մաթեմատիկական առումով ընդգրկույթը [0,1]: Սերմը գալիս է մեքենայի ներքին ժամացույցից կամ կարող է կարգավորվել srand ֆունկցիայի հետ:

կլոր ( arg )

Եթե arg- ը հանդիսանում է ամբողջական արժեք, վերադարձնում է arg , հակառակ դեպքում վերածվում է ամբողջությամբ, կլորացման միջոցով եւ վերադարձնում է փոխարկվող արժեքը:

մեղ ( arg )

Վերադարձնում է արգանդի սինին, որը չափվում է ռադիյաններով:

սինհ ( arg )

Վերադարձնում է arg- ի հիպերբոլիկ սինուսը: Եթե ​​արդյունքը կարող է լցվել, ապա վերադարձվում է սխալ:

sqrt ( arg )

Վերադարձնում է arg- ի քառակուսի արմատը: Արգը պետք է լինի ոչ բացասական:

srand ( arg )

The arg , որը պետք է լինի ամբողջ թիվ, օգտագործվում է զտիչի պատահական թվերի գեներատորի համար: Վերադարձնում է առաջին զանազան թիվը այդ սերմից: Յուրաքանչյուր թարգմանիչ ունի իր սեփական սերմը:

tan ( arg )

Վերադարձնում է արգանդի տանգվածը , որը չափվում է ռադիաններում:

tanh ( arg )

Վերադարձնում է arg- ի հիպերբոլիկ տանգվածը :

Բացի այդ նախապես սահմանված գործառույթներից, ծրագրերը կարող են սահմանել լրացուցիչ գործառույթներ `օգտագործելով Tcl_CreateMathFunc ():

Տեսակները, արտահոսքը եւ ճշգրտությունը

Բոլոր ներքին հաշվարկները, որոնք ընդգրկում են ամբողջ թվերը, կատարվում են C տեսակի երկարությամբ , եւ լողացող կետի մեջ ներառված բոլոր ներքին հաշվարկները կատարվում են C տեսակի կրկնակի : Երբ լարային կետը փոխարկելու դեպքում հայտնաբերված արտահոսքը հայտնաբերվում է եւ հանգեցնում է Tcl սխալ: Լարային տողից վերափոխելու համար գերբեռնվածության հայտնաբերումը կախված է տեղական գրադարանի գրադարաններից որոշակի վարքագծի վարքագծից, ուստի այն պետք է դիտվի որպես անհուսալի: Ամեն դեպքում, միջինը ամբողջական արդյունքների համար ընդհանուր առմամբ ամբողջովին չի հայտնաբերվում ամբողջ թվաքանակի արտահոսքը եւ տատանումները: Լողացող կետերի արտահոսքը եւ տատանումները հայտնաբերվում են այն սարքավորման կողմից ապահովված աստիճանի, որը, ընդհանուր առմամբ, բավականին հուսալի է:

Ներքին ներկայացումների միջեւ փոխակերպումը ամբողջական, լողացող կետ, եւ string operands- ի համար կատարվում է ինքնաբերաբար: Հաշվարկային հաշվարկների համար օգտագործվում են ամբողջական թվեր, մինչեւ որոշ լողացող կետի թվարկումը, որից հետո օգտագործվում է լողացող կետը: Օրինակ,

արտահայտեք 5/4-ը

վերադառնում է 1

expr 5 / 4.0 expr 5 / ([string երկարություն "abcd"] + 0.0)

թե վերադարձ 1.25: Լողացող միավորի արժեքները միշտ վերադարձվում են `` ` . '' կամ էլ, որպեսզի նրանք ամբողջ թվով արժեքներ չեն ունենա: Օրինակ,

արտահայտեք 20.0 / 5.0

վերադարձնում է 4.0 , այլ ոչ թե 4 :

Լարային գործառնություններ

Ստրի արժեքները կարող են օգտագործվել որպես համեմատության օպերատորների գործառույթներ, թեեւ արտահայտիչը փորձում է համեմատություններ անել որպես ամբողջական կամ լողացող կետ, երբ դա կարող է լինել: Եթե ​​համեմատության գործառույթներից մեկը լարային է, իսկ մյուսը ունի թվային արժեք, թվային օպերանդը վերափոխվում է մի տող, օգտագործելով C sprintf ձեւաչափը % d , integers- ի եւ % g- ի լողացող կետերի արժեքների համար: Օրինակ, հրամանները

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

այնպես էլ վերադարձը 1. Առաջին համեմատությունը կատարվում է ամբողջական հաշվարկի միջոցով, իսկ երկրորդը կատարվում է լարային համեմատությամբ `օգտագործելով երկրորդ operand- ը վերափոխված տողի 18 : Քանի որ Tcl- ի հավանականությունը, արժեքների հետ համեմատելը, հնարավոր է, հնարավոր է, այնուամենայնիվ, լավ գաղափար է նման օպերատորների նման == օգտագործելը, երբ դուք իսկապես ուզում եք լարային համեմատություն եւ գործառույթների արժեքները կարող են լինել կամայական; դա ավելի լավ է, քան այս դեպքերում օգտագործել լարային հրամանը:

Performance նկատառումներ

Ներդիրները բերում են լավագույն արագության եւ ամենափոքր պահեստային պահանջների համար: Սա թույլ է տալիս Tcl բայբակիչի կոմպիլյատորին ստեղծել լավագույն կոդը:

Ինչպես վերը նշված է, արտահայտությունները փոխարինվում են երկու անգամ `մեկ անգամ, Tcl պարկեր եւ մեկ անգամ` expr հրամանով: Օրինակ, հրամանները

սահմանել է 3 set b {$ a + 2} expr $ b * 4

11-ը, ոչ թե 4-ը: Այսինքն, Tcl parser- ը առաջին հերթին փոխարինելու է $ a + 2 փոփոխականի համար, ապա expr հրամանը կգնահատի $ a + 2 * 4 արտահայտությունը :

Շատ արտահայտություններ չեն պահանջում փոխարինման երկրորդ փուլ: Կամ դրանք կցվում են braces կամ, եթե ոչ, նրանց փոփոխական եւ հրամանի փոխարինումներ տալու համարներ կամ տողերը, որոնք չեն պահանջում փոխարինումներ: Այնուամենայնիվ, քանի որ մի քանի անճաշակ արտահայտություններ փոխարինելու երկու փուլերի կարիք ունեն, բայտոդային կոմպիլյատորը պետք է արտացոլի այս իրավիճակը կարգավորող լրացուցիչ հրահանգներ: Ամենաթանկ կոդը պահանջվում է անընդհատ արտահայտված արտահայտությունների համար, որոնք պարունակում են հրամանի փոխարինիչներ: Այս արտահայտությունները պետք է կատարվեն, երբ արտահայտությունը կատարվում է նոր կոդը ստեղծելով:

Հիմնաբառեր

arithmetic, boolean , համեմատել, արտահայտություն, fuzzy համեմատություն

Կարեւոր է. Օգտագործեք հրամանատարությունը ( % մարդ ), որպեսզի տեսնեք, թե ինչպես է օգտագործվում հրամանը ձեր որոշակի համակարգչում: