Име
екпр - Оцените израз
Синопсис
екпр арг ? арг арг … ?
Цонцатенатес арг (додавање размака између њих), оцењује резултат као израз Тцл и враћа вредност. Оператери дозвољени у Тцл изразима су подскуп оператера дозвољених у Ц изразима, а имају исто значење и предност као одговарајући Ц оператери. Изрази скоро увек дају нумеричке резултате (вредности цијелог или плутајуће тачке). На пример, израз
екпр 8.2 + 6
оцењује на 14.2. Тцл изрази се разликују од Ц израза на начин на који су наведени операнди. Такође, Тцл изрази подржавају не-нумеричке операнде и упоређивања стрингова.
Операнде
Тцл израз се састоји од комбинације операнди, оператора и заграда. Бијели простор се може користити између операнда и оператора и заграда; то се занемарује упутствима израза. Гдје је могуће, операнди се тумаче као цијели вриједности. Вредности цијелог броја могу бити специфициране у децималном (у нормалном случају), у окталном (ако је први карактер операнда0), или у хексадецималном (ако су прва два слова операнда0к). Ако операнд нема један од интегралних формата датих горе, онда се третира као број са плутајућим тачком ако је то могуће. Бројеви са плутајућим тачкама могу бити наведени на било који начин прихваћен од стране АНСИ-компатибилног Ц компајлера (осим што јеф, Ф, л, иЛ суфиксе неће бити дозвољене у већини инсталација). На пример, сви од следећих су важећи бројеви са плутајућим тачкама: 2.1, 3., 6е4, 7.91е + 16. Ако ниједно нумеричко тумачење није могуће, операнд се оставља као низ (и може се примијенити само ограничен скуп оператора).
Операнде могу бити специфициране на било који од следећих начина:
1
Као нумеричка вриједност, целовита или плутајућа тачка.
2
Као Тцл варијабла, користећи стандард$ нотација. Вредност варијабле ће се користити као операнд.
3
Као низ затворен у двоструким цитатима. Парсер израза ће извршити бацксласх, варијабилне и командне замене на информацијама између наводника и користити резултујућу вриједност као операнд
4
Као низ у ограду. Ликови између отворене нараменице и одговарајуће бленде се користе као операнд без икаквих замена.
5
Као команда Тцл приложена у заградама. Команда ће се извршити и њен резултат ће се користити као операнд.
6
Као математичка функција чији аргумент има било коју од горњих форми за операнде, као што јесин ($ к). Погледајте доле за листу дефинисаних функција.
Где се супституције појављују изнад (нпр. Унутар цитираних низова), оне се обављају помоћу инструкција израза. Међутим, додатни слој супституције је можда већ извршио командни анализатор пре него што је позван експресиони процесор. Као што је објашњено у наставку, обично је најбоље додати изразе у заштитне сврхе како би се спречило да командни анализатор изврши замене на садржају.
За неке примере једноставних израза претпоставимо варијаблуа има вредност 3 и варијаблубима вредност 6. Тада ће команда са леве стране сваке од линија донијети вриједност на десној страни линије:
екпр 3.1 + $ а6.1 екпр 2 + "$ а. $ б" 5.6 екпр 4 * л "ленгтх" 6 2 " 8 екпр {{ворд оне} <" ворд $ а "} 0
Оператори
Важећи оператери су наведени у наставку, груписани по редукцијском реду приоритета:
- + ~ !
Унари минус, унари плус, бит-висе НОТ, логички НОТ. Ниједан од ових операнда се не може примијенити на стринг операнде, а битно МИСО се може примијенити само на интегерс.
* / %
Помножите, поделите, остатак. Ниједан од ових операнда се не може примијенити на стринг операнде, а остатак може бити примијењен само на интегерс. Остатак увек има исти знак као и делилац и апсолутна вредност мања од дељива.
+ -
Додајте и одузмите. Важи за све нумеричке операнде.
<< >>
Лево и десно померање. Важећи само за цео број операнди. Прави помак увек пропагира знак знакова.
< > <= >=
Боолеан је мањи, већи, мањи или једнак и већи од или једнак. Сваки оператор производи 1 ако је стање тачно, 0 у супротном. Ови оператери се могу примијенити на стрингове, као и нумеричке операнде, у ком случају се користи низ вриједности.
== !=
Боолеан једнак и није једнак. Сваки оператор ствара резултат нула / један. Важи за све типове операнда.
&
Битно и. Важећи само за цео број операнди.
^
Битно искључиво ИЛИ. Важећи само за цео број операнди.
|
Битно м. Важећи само за цео број операнди.
&&
Логично и. Произведе 1 резултат ако су два операнда нула, 0 у супротном. Важећи само за боолеан и нумеричке (интегерс или флоатинг-поинт) операнде.
||
Логички ОР. Произведе резултат 0 ако су оба операнда нула, 1 иначе. Важећи само за боолеан и нумеричке (интегерс или флоатинг-поинт) операнде.
Икс ? и : з
Ако-онда-друго, као у Ц. Ако Икс процењује на нула, онда је резултат вредност од и . Иначе, резултат је вриједност з . Тхе Икс операнд мора имати нумеричку вредност.
Погледајте Ц приручник за више детаља о резултатима које произведе сваки оператор. Сви бинарни оператери се налазе од десне до десне на истом нивоу. На пример, команда
екпр 4 * 2 <7
враћа 0.
Тхе&&, ||, и?: оператери имају "лењост", исто као у Ц, што значи да се операнди не процењују ако нису потребни за одређивање исхода. На пример, у команди
екпр {$ в? а: б
само један ода илиб ће се стварно процијенити, у зависности од вриједности$ в. Приметите, међутим, да је ово једино тачно ако је читав израз затворен у грудима; у супротном, Тцл парсер ће процијенити обаа иб пре него што позоветеекпр команда.
Математичке функције
Тцл подржава следеће математичке функције у изразима:
абс цосхПријаваскрт ацос двоструколог10сранд као у екпповтан атан спратрандтанх атан2 фмодокругли цеил хипотгрех цос интсинх
абс ( арг )
Враћа апсолутну вредност арг . Арг може бити или цела или плутајућа тачка, а резултат се враћа у истом облику.
ацос ( арг )
Враћа арц косинус од арг , у опсегу 0, пи радијана. Арг треба да буде у опсегу -1,1.
као у( арг )
Враћа арц сине оф арг , у опсегу -пи / 2, пи / 2 радијана. Арг треба да буде у опсегу -1,1.
атан ( арг )
Враћа тангентни лук арг , у опсегу -пи / 2, пи / 2 радијана.
атан2 ( к, и )
Враћа тангентни лук и / Икс , у опсегу -пи, пи радијана. Икс и и не може бити 0.
цеил ( арг )
Враћа најмању вриједност цијеле вриједности не мање од арг .
цос ( арг )
Враћа косинус арг , мерено у радијанцима.
цосх ( арг )
Враћа хиперболични косинус арг . Ако резултат доведе до преливања, грешка се враћа.
доубле ( арг )
Ако арг је пливајућа вредност, враћа се арг , иначе се претвара арг пливају и враћа конвертовану вредност.
екп ( арг )
Враћа експоненцију арг , дефинисана као е ** арг . Ако резултат доведе до преливања, грешка се враћа.
спрат( арг )
Враћа највећу интегралну вредност која није већа од арг .
фмод ( к, и )
Враћа остатак остатка плутајуће тачке од поделе Икс од стране и . Ако и је 0, грешка се враћа.
хипот ( к, и )
Израчунава дужину хипотенуза правоуглог троугла ( Икс * Икс + и * и ).
инт ( арг )
Ако арг је цјеловита вриједност, враћа се арг , иначе се претвара арг у цјелину по скраћивањем и враћа конвертовану вриједност.
Пријава( арг )
Враћа природни логаритам арг . Арг мора бити позитивна вредност.
лог10 ( арг )
Враћа базу 10 логаритма арг . Арг мора бити позитивна вредност.
пов (пов. к, и )
Израчунава вредност Икс подигнута на моћ и . Ако Икс је негативан, и мора бити цјеловита вриједност.
ранд ()
Враћа број са плутајућим тачкама од нуле до само мање од једног или, у математичком смислу, опсег 0,1). Семе долази из унутрашњег сата машине или се може поставити ручно с сранд функцијом.
округли ( арг )
Ако арг је цјеловита вриједност, враћа се арг , иначе се претвара арг у цијели број окружењем и враћа конвертовану вриједност.
грех ( арг )
Враћа сине арг , мерено у радијанцима.
синх ( арг )
Враћа хиперболични сине арг . Ако резултат доведе до преливања, грешка се враћа.
скрт ( арг )
Враћа квадратни корен од арг . Арг мора бити негативан.
сранд ( арг )
Тхе арг , који мора бити цео број, користи се за ресетовање семена за генератор случајних бројева. Враћа први случајни број из тог семена. Сваки тумач има своје семе.
тан ( арг )
Враћа тангенцију арг , мерено у радијанцима.
танх ( арг )
Враћа хиперболичну тангенцију арг .
Поред ових унапред дефинисаних функција, апликације могу дефинисати додатне функције које користеТцл_ЦреатеМатхФунц().
Врсте, прелив и прецизност
Сви интерни обрачуни који укључују интегерс се обављају са типом Ц дуго , а сви интерни рачунари који укључују плутајуће тачке се раде са типом Ц двоструко . Када конвертује низ у флоатинг поинт, открива се оверфлов експонента и резултира грешком Тцл. За конверзију у цијели низ из стринга, детекција преливања зависи од понашања неких рутина у локалној Ц библиотеци, тако да би требало сматрати непоузданим. У сваком случају, цјелобројни прелив и пријелаз се генерално не откривају поуздано за средње резултате. Преливање и падање плутајућих тачака се детектују до степена који подржава хардвер, што је генерално прилично поуздано.
Конверзија између интерних приказа за интегер, флоатинг-поинт и стринг операндс се врши аутоматски по потреби. За аритметичка израчунавања, интегрирају се све док се не унесе неки број са плутајућим тачкама, након чега се користи плутајућа тачка. На пример,
екпр 5/4
враћа 1, док
екпр 5 / 4.0 екпр 5 / (дужина стринга "абцд" + 0.0)
обе врате 1.25. Вредности плутајуће тачке се увек враћају са ``.'' или ане тако да не изгледају као цјеловите вриједности. На пример,
екпр 20.0 / 5.0
повратак4.0, не4.
Стринг Оператионс
Вредности стринга могу се користити као операнди оператора успоредбе, иако евалуатор израза покушава направити поређења као цијели број или плутајуће тачке када то може. Ако је један од операнди упоређивања низ, а други има нумеричку вредност, нумерички операнд се претвара у низ помоћу Ц спринтф спецификатор формата% д за интегерс и% г за плутајуће вредности. На примјер, команде
екпр {"0к03"> "2"} екпр {"0и" <"0к12"}
обе врате 1. Прво поређење се врши користећи целодерско поређење, а друго се врши помоћу упоређивања стринга након што се други конвертор претвори у низ18. Због тенденције Тцл-а да третира вриједности као бројеве кад год је то могуће, није уопће добра идеја да се користе оператери као што су==када стварно желите стринг упоређивање и вриједности операнди могу бити произвољне; у овим случајевима је боље користитиниз умјесто тога.
Оцена учинка
Додајте изразе у облику за најбољу брзину и најмање захтеве за складиштењем. Ово омогућава Тцл битецоде компајлеру да генерише најбољи код.
Као што је већ речено, изрази се замењују два пута: једном помоћу Тцл парсера и једном од стране екпр команда. На примјер, команде
поставите 3 поставите б {$ а + 2} екпр $ б * 4
враћање 11, а не вишеструко 4. То је зато што ће тцл парсер прво заменити$ а + 2 за варијаблуб, затимекпр команда ће процијенити израз$ а + 2 * 4.
Већини израза не захтевају други круг замене. Или су затворени у грудима или, ако не, њихове варијабилне и командне супституције доносе бројеве или стрингове који сами не захтевају замјене. Међутим, пошто је за неколико необрабљених израза потребно два круга замена, компајлер битецоде мора да емитује додатне инструкције за рјешавање ове ситуације. Најскупљи код је потребан за необрађене изразе који садрже командне замене. Ови изрази се морају имплементирати стварањем новог кода сваки пут када се израз изводи.
Кључне речи
аритметичка, логична, упоредна, експресивна, фази сразмера
Важно: Користити човек команда ( % ман ) да видите како се на вашем рачунару користи команда.













