Անուն
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 sinhabs ( 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 * 411-ը, ոչ թե 4-ը: Այսինքն, Tcl parser- ը առաջին հերթին փոխարինելու է $ a + 2 փոփոխականի համար, ապա expr հրամանը կգնահատի $ a + 2 * 4 արտահայտությունը :
Շատ արտահայտություններ չեն պահանջում փոխարինման երկրորդ փուլ: Կամ դրանք կցվում են braces կամ, եթե ոչ, նրանց փոփոխական եւ հրամանի փոխարինումներ տալու համարներ կամ տողերը, որոնք չեն պահանջում փոխարինումներ: Այնուամենայնիվ, քանի որ մի քանի անճաշակ արտահայտություններ փոխարինելու երկու փուլերի կարիք ունեն, բայտոդային կոմպիլյատորը պետք է արտացոլի այս իրավիճակը կարգավորող լրացուցիչ հրահանգներ: Ամենաթանկ կոդը պահանջվում է անընդհատ արտահայտված արտահայտությունների համար, որոնք պարունակում են հրամանի փոխարինիչներ: Այս արտահայտությունները պետք է կատարվեն, երբ արտահայտությունը կատարվում է նոր կոդը ստեղծելով:
Հիմնաբառեր
arithmetic, boolean , համեմատել, արտահայտություն, fuzzy համեմատություն
Կարեւոր է. Օգտագործեք հրամանատարությունը ( % մարդ ), որպեսզի տեսնեք, թե ինչպես է օգտագործվում հրամանը ձեր որոշակի համակարգչում: