име
expr - Оценявайте израз
резюме
ИЗРАЗът арг ? арг арг … ?
Обединява арг (добавя се разделителни интервали между тях), оценява резултата като израз Tcl и връща стойността. Операторите, разрешени в Tcl изразите, са подгрупа от операторите, разрешени в изразите С, и те имат същото значение и приоритет като съответните C оператори. Изразите почти винаги водят до цифрови резултати (цели числа или стойности с плаваща запетая). Например, изразът
expr 8.2 + 6
оценява на 14.2. Изразите Tcl се различават от изразите C по начина, по който са определени операндите. Също така, изразът Tcl поддържа не-цифрови операнди и сравнения на низове.
операнди
Изразът Tcl се състои от комбинация от операнди, оператори и скоби. Може да се използва бяло пространство между операндите и операторите и скобите; тя се игнорира от инструкциите на израза. Когато е възможно, операндите се интерпретират като цели стойности. Цели стойности могат да бъдат посочени в десетичната (нормалната), в осмична (ако е първият знак на операнда)0) или в шестнадесетичен (ако са първите два знака на операнда0x). Ако операндът няма един от формите на цялото число, дадени по-горе, тогава той се третира като номер с плаваща запетая, ако това е възможно. Номерата с плаваща запетая могат да се задават по който и да е от начините, приети от компилатора съвместим с ANSI C (с изключение на това, чее, F, л, иL на повечето инсталации няма да бъдат разрешени суфикси). Например, всички от следните са валидни номера с плаваща запетая: 2.1, 3., 6e4, 7.91e + 16. Ако не е възможно числено тълкуване, тогава операндът остава като низ (и може да се приложи само ограничен набор от оператори).
Операндите могат да се задават по един от следните начини:
1
Като цифрова стойност, или цяло число или плаваща точка.
2
Като променлива Tcl, използвайки стандартен$ нотация. Стойността на променливата ще се използва като операнд.
3
Като низ, заграден в двойни кавички. Експресиращият израз ще извърши замествания на обратна наклонена черта, променлива и команда на информацията между цитатите и ще използва резултантната стойност като операнд
4
Като низ, заграден в скоби. Героите между отворената скоба и съответната близка скоба ще бъдат използвани като операнд без никакви замествания.
5
Като команда Tcl затворена в скоби. Командата ще бъде изпълнена и нейният резултат ще бъде използван като операнд.
6
Като математическа функция, чиито аргументи имат някоя от горните форми за операнди, като напримергрях ($ х), Вижте по-долу списък с определени функции.
Когато заместванията се появяват по-горе (например вътре в цитираните низове), те се изпълняват от инструкциите на израза. Възможно е обаче допълнителният слой за заместване да е бил изпълнен от командния анализатор преди извикването на процесора на израза. Както е обсъдено по-долу, обикновено е най-добре да включите изрази в скоби, за да предотвратите командния анализатор да извършва замествания върху съдържанието.
За някои примери на прости изрази, предположим променливатаа има стойност 3 и променливатабима стойност 6. След това командата отляво на всеки от линиите по-долу ще доведе до стойността от дясната страна на линията:
изписване 3.1 + $ a6.1 изтр. 2 + "$ a. $ b" 5.6 експрес 4 * дължина "6 2" 8 експре {{дума едно} <"дума $ a"} 0
Операторите
Валутните оператори са изброени по-долу, групирани в низходящ ред:
- + ~ !
Unary минус, unary плюс, bit-мъдър НЕ, логически НЕ. Нито един от тези операнди не може да бъде приложен към низови операнди, а битово не може да се прилага само към числа.
* / %
Умножете, разделете, останете. Нито един от тези операнди не може да бъде приложен към низови операнди, а остатъкът може да бъде приложен само към числа. Остатъкът винаги ще има същия знак като делителя и абсолютна стойност по-малка от делителя.
+ -
Добавяне и изваждане. Валиден за всички числови операнди.
<< >>
Ляво и дясно смяна. Валиден само за цели операнди. Десният превключвател винаги разпространява знака.
< > <= >=
Булева по-малка, по-голяма, по-малка или равна, по-голяма или равна. Всеки оператор произвежда 1, ако условието е вярно, 0 в противен случай. Тези оператори могат да се прилагат към низове, както и цифрови операнди, в който случай се използва сравняване на низове.
== !=
Boolean равен и не е равен. Всеки оператор произвежда нула / един резултат. Валиден за всички типове операнди.
&
Бит-мъдър И. Валиден само за цели операнди.
^
Бит-мъдър изключителен OR. Валиден само за цели операнди.
|
Бит-мъдър ИЛИ. Валиден само за цели операнди.
&&
Логически И. Произвежда 1 резултат, ако и двата операнда са различни от 0, в противен случай. Валидни само за булеви и цифрови (цели числа или плаваща запетая).
||
Логически OR. Произвежда 0 резултат, ако и двата операнда са нула, 1 иначе. Валидни само за булеви и цифрови (цели числа или плаваща запетая).
х ? ш : Z
Ако-тогава-друго, както и в C. Ако х се оценява на ненулева, тогава резултатът е стойността на ш , В противен случай резултатът е стойността на Z , Най- х операндът трябва да има цифрова стойност.
Вижте ръководството C за повече подробности относно резултатите, получени от всеки оператор. Всички двоични оператори се групират от ляво на дясно в същото ниво на приоритет. Например командата
expr 4 * 2 <7
връща 0.
Най-&&, ||, и?: операторите имат "мързелива оценка", точно както в С, което означава, че операндите не се оценяват, ако не са необходими за определяне на резултата. Например в командата
expr {$ v? а: b
само един от тяхА илиЬ ще се оценява в зависимост от стойността на$ о, Имайте предвид обаче, че това е вярно само ако целият израз е затворен в скоби; в противен случай анализаторът Tcl ще направи оценка и на дветеА иЬ преди да се позове наИЗРАЗът команда.
Математически функции
Tcl поддържа следните математически функции в изрази:
коремни мускули палкадънерSQRT ACOS двойноlog10Srand ASIN ГоденPowтен тен етажрандTANH ATAN2 FMODкръгъл достигам пределна точка hypotгрях косинус интSinh
коремни мускули( арг )
Връща абсолютната стойност на арг . Arg може да бъде цяло число или плаваща точка, а резултатът се връща в същата форма.
ACOS ( арг )
Връща дъговия косинус на арг , в диапазона 0, пи радиани. Arg трябва да бъде в диапазона -1,1.
Продуктов номер ( арг )
Връща арката на арг , в диапазона -pi / 2, pi / 2 радиани. Arg трябва да бъде в диапазона -1,1.
тен( арг )
Връща дъговата тангента на арг , в диапазона -pi / 2, pi / 2 радиани.
ATAN2 ( x, y )
Връща дъговата тангента на ш / х , в диапазона -pi, pi radians. х и ш не могат да бъдат и двете.
достигам пределна точка ( арг )
Връща най-малката стойност на цяло число не по-малка от арг .
защото ( арг )
Връща косинуса на арг , измерена в радиани.
палка ( арг )
Връща хиперболичния косинус на арг , Ако резултатът ще доведе до преливане, се връща грешка.
двойни ( арг )
ако арг е плаваща стойност, връща се арг , в противен случай се превръща арг да плава и връща преобразуваната стойност.
Годен ( арг )
Връща експоненциалното от арг , дефинирано като е ** арг , Ако резултатът ще доведе до преливане, се връща грешка.
етаж ( арг )
Връща най-голямата неразделна стойност не по-голяма от арг .
FMOD ( x, y )
Връща остатъка с плаваща запетая на разделянето на х от ш , ако ш е 0, връща се грешка.
hypot ( x, y )
Изчислява дължината на хипотенузата на правоъгълен триъгълник ( х * х + ш * ш ).
инт ( арг )
ако арг е целочислена стойност, връща се арг , в противен случай се превръща арг до цяло число чрез срязване и връща конвертираната стойност.
влезте ( арг )
Връща естествения логаритъм на арг . Arg трябва да бъде положителна стойност.
10 (на арг )
Връща логаритъма на основата 10 на арг . Arg трябва да бъде положителна стойност.
Pow ( x, y )
Изчислява стойността на х издигнат до властта ш , ако х е отрицателен, ш трябва да е цяло число.
ранд ()
Връща число с плаваща запетая от нула до малко по-малко от едно или, по математически начин, диапазон 0,1. Семената идват от вътрешния часовник на машината или могат да бъдат настроени ръчно с функцията Srand.
кръгъл( арг )
ако арг е целочислена стойност, връща се арг , в противен случай се превръща арг към цяло число чрез закръгляване и връща преобразуваната стойност.
грях ( арг )
Връща синуса на арг , измерена в радиани.
Sinh ( арг )
Връща хиперболичния синус на арг , Ако резултатът ще доведе до преливане, се връща грешка.
SQRT ( арг )
Връща корен квадратен на арг . Arg трябва да бъдат неотрицателни.
Srand ( арг )
Най- арг , който трябва да е цяло число, се използва за нулиране на семена за генератора на случайни числа. Връща първото произволно число от това семе. Всеки преводач има собствено семе.
тен ( арг )
Връща допирателната към арг , измерена в радиани.
TANH ( арг )
Връща хиперболичната тангента на арг .
В допълнение към тези предварително зададени функции, приложенията могат да дефинират допълнителни функции, като използватTcl_CreateMathFunc().
Видове, преливане и прецизност
Всички вътрешни изчисления, включващи числа, се извършват с тип С дълго , а всички вътрешни изчисления, включващи плаваща точка, се извършват с тип С двойно , При конвертиране на низ в плаваща запетая се установява препълване на експонента и води до Tcl грешка. За преобразуване до цяло число от низ, откриването на преливане зависи от поведението на някои рутинни процедури в местната библиотека C, така че трябва да се счита за ненадеждна. Във всеки случай, цялостният преливник и понижено ниво обикновено не се установяват надеждно за междинни резултати. Преливането и подреждането на плаваща запетая се откриват до степента, поддържана от хардуера, което обикновено е доста надеждно.
Преобразуването между вътрешните представяния за цели числа, числа с плаваща запетая и низове се извършва автоматично според нуждите. За аритметични изчисления се използват цели числа, докато се въведе номер с плаваща запетая, след което се използва плаваща точка. Например,
expr 5/4
връща 1, докато
expr 5 / 4.0 expr 5 / (дължина на низ "abcd" + 0.0)
и двете връщат 1.25. Стойностите на плаваща запетая винаги се връщат с "`.'' илид така че те няма да изглеждат като цели числа. Например,
expr 20.0 / 5.0
се завръща4.0, не4.
Струнни операции
Стойностите на низовете могат да се използват като операнди на операторите за сравнение, въпреки че оценяващият израз се опитва да направи сравнения като цяло число или плаваща точка, когато може. Ако един от операндите на сравнението е низ и другият има числена стойност, цифровият операнд се преобразува обратно в низ с помощта на C sprintf формат спецификатор%д за числа и% г за стойности с плаваща запетая. Например командите
expr {"0x03"> "2"} изрази {"0y" <"0x12"}
и двете връщат 1. Първото сравнение се прави с помощта на цяло число сравнение, а второто се извършва чрез сравняване на низовете, след като вторият операнд се преобразува в низа18, Поради тенденцията на Tcl да третира ценностите като числа, когато е възможно, обикновено не е добра идея да се използват оператори като==когато наистина искате сравняване на низове и стойностите на операндите да са произволни; в тези случаи е по-добре да използватениз вместо това.
Съображения за ефективността
Приложете изрази в скоби за най-добра скорост и най-малките изисквания за съхранение. Това позволява на Tcl bytecode компилатора да генерира най-добрия код.
Както бе споменато по-горе, изразите се заместват два пъти: веднъж с Tcl анализатора и веднъж с ИЗРАЗът команда. Например командите
задайте 3 задайте b {$ a + 2} expr $ b * 4
връщане 11, не е кратно на 4. Това е така, защото Tcl анализаторът първо ще замести$ a + 2 за променливатаб, тогаваИЗРАЗът командата ще оцени израза$ a + 2 * 4.
Повечето изрази не изискват втори кръг от замествания. Или те са затворени в скоби, или, ако не, техните променливи и командни замествания дават числа или струни, които сами по себе си не изискват подмяна. Въпреки това, тъй като няколко неуловими израза се нуждаят от два кръга замествания, компилаторът на bytecode трябва да издава допълнителни инструкции, за да се справи с тази ситуация. Най-скъпият код е необходим за невъоръжени изрази, които съдържат замествания на команди. Тези изрази трябва да бъдат изпълнени чрез генериране на нов код всеки път, когато изразът се изпълнява.
Ключови думи
аритметично, булево, сравни, израз, размито сравнение
Важно: Използвай мъж команда ( % man ), за да видите как се използва команда на вашия компютър.