Linux / Unix команадсы: экспр

Атауы

expr - өрнекті бағалау

Синопсис

expr arg ? arg arg ... ?

Concatenates arg (олардың арасындағы бөлгіш бос орындар қосу), нәтижені Tcl өрнегі ретінде бағалайды және мәнді қайтарады. Tcl өрнектерінде рұқсат етілген операторлар C өрнектерінде рұқсат етілген операторлардың жиыны болып табылады және олар сәйкес C операторлары сияқты бірдей мағына мен басымдыққа ие. Дәлелдер әрқашан сандық нәтижелерді береді (бүтін немесе өзгермелі нүкте мәндері). Мысалы, өрнек

8.2 + 6 белгісін басыңыз

14.2-ке бағаланады. Tcl өрнектері C таңбаларынан операндтар көрсетілгендей ерекшеленеді. Сондай-ақ, Tcl өрнектері сандық емес операндтарды және жолдарды салыстыруды қолдайды.

Операнттар

Tcl өрнегі операндтардың, операторлардың және жақшалардың комбинациясынан тұрады. Ақ кеңістік операндтар мен операторлар мен жақшалар арасында пайдаланылуы мүмкін; ол өрнек нұсқауларымен елемейді. Мүмкін болса, операндар бүтін мәндер ретінде түсіндіріледі. Бүтін мәндері ондық (қалыпты жағдайда), сегіздік (егер операнды бірінші таңбасы 0 болса ) немесе он алтылық (егер операнды алғашқы екі таңбасы 0x болса ) болуы мүмкін. Егер операнда жоғарыда берілген бүтін пішімдердің біреуі болмаса, ол мүмкін болатын болса, өзгермелі нүкте нөмірі ретінде қарастырылады. Күрделі сандар ANSI-үйлесімді C компиляторы арқылы қабылданған тәсілдердің кез-келгенінде көрсетілуі мүмкін (көптеген қондырғыларда f , F , l және L suffixes рұқсат етілмейді). Мысалы, төмендегілердің барлығы жарамды санау нүктелері болып табылады: 2.1, 3., 6e4, 7.91e + 16. Егер сандық интерпретация болмаса, онда операнд жол ретінде қалдырылады (оған тек операторлар шектеулі болуы мүмкін).

Операнттар келесі жолдардың кез-келгенінде көрсетілуі мүмкін:

[1]

Сандық мән ретінде бүтін немесе өзгермелі нүкте.

[2]

Стандартты $ ескертуін пайдаланып, Tcl айнымалысы ретінде. Айнымалының мәні операнда ретінде пайдаланылады.

[3]

Қос тырнақшаға салынған жол ретінде. Өрнек талдаушысы тырнақшалар, айнымалы және тырнақшалар туралы ақпаратта тырнақшалар орындайды және алынған мәнді операнда

[4]

Кесекке салынған жол ретінде. Ашық жақтаудың және сәйкес келетін тығыздағыштың арасындағы таңбалар ешқандай алмастырусыз операнд ретінде пайдаланылады.

[5]

Tcl пәрмені ретінде жақшаға салынған. Команда орындалады және оның нәтижесі операнд ретінде пайдаланылады.

[6]

Математикалық функция ретінде дәлелдерде операндаларға арналған жоғарыда көрсетілген формалар бар, мысалы, күн ($ x) . Белгіленген функциялар тізімін төменде қараңыз.

Жоғарыда орын ауыстыру орын алса (мысалы, тырнақшалар ішінде), олар өрнек нұсқауларымен орындалады. Дегенмен, ауыстырудың қосымша қабаты пәрменді талдаушы арқылы өрнек процессоры шақырылғанға дейін орындалды. Төменде талқыланғандай, командалық талдаушы мазмұндағы ауыстыруды болдырмау үшін әшекейге өрнектерді қосу жақсы.

Қарапайым өрнектердің кейбір мысалдарында, айнымалы мән 3-ке тең, ал айнымалы b- де 6-мағынасы бар. Содан кейін төмендегі әрбір жолдың сол жағындағы пәрмен жолдың оң жағындағы мәнді шығарады:

expr 3,1 + $ a6.1 expr 2 + «$ a. $ b» 5,6 expr 4 * [ұзындығы «6 2»] 8 expr {{word one} <«word $ a»} 0

Операторлар

Тиісті операторлар төменде тізімделіп, төмендету тәртібімен топтастырылады:

- + ~!

Unary минус, unary plus, bit-wise NOT, логикалық NOT. Бұл операндалардың ешқайсысы string операндаларына қолданылмайды және битлдік NOT тек бүтін сандарға қолданылмайды.

* /%

Көтеріңіз, бөліңіз, қалдық. Бұл операндтардың ешқайсысы string операндаларына қолданылмайды, ал қалғаны тек бүтін сандарға қолданылуы мүмкін. Қалған бөлгіш әрдайым бөлгіш және бөлгішке қарағанда абсолюттік шамасы сияқты бірдей белгіге ие болады.

+ -

Қосу және азайту. Сандық операндтар үшін жарамды.

<< >>

Сол және оң жақ жылжу. Тек бүтін операндтар үшін жарамды. Оң жақ жылжу әрқашан белгі битін таратады.

<> <=> =

Кіші, үлкен, аз немесе тең емес және үлкен немесе тең. Әрбір оператор 1 шартты, егер басқаша болса, 1 шығарады. Бұл операторлар жолдарға, сондай-ақ сандық операндаларға қолданылуы мүмкін, бұл жағдайда жолды салыстыру пайдаланылады.

==! =

Boolean тең және тең емес. Әрбір оператор нөлдік / бір нәтиже шығарады. Барлық операнд түрлеріне жарамды.

Және

Бит-дана AND. Тек бүтін операндтар үшін жарамды.

^

Bit-wise эксклюзивті НЕМЕСЕ. Тек бүтін операндтар үшін жарамды.

|

Битлдік немесе НЕМЕСЕ. Тек бүтін операндтар үшін жарамды.

&&

Логикалық ЖӘНЕ. Егер екі операнды да нөлге тең болмаса, 1 нəтиже береді. Тек логикалық және сандық (бүтін сандар немесе өзгермелі нүктелер) операндалар үшін жарамды.

| |

Логикалық НЕМЕСЕ. Екі операнд нөл болса, 0 нәтижесін береді, әйтпесе 1. Тек логикалық және сандық (бүтін сандар немесе өзгермелі нүктелер) операндалар үшін жарамды.

x ? y : z

If-then-else C сияқты. Егер x нөлден емес болса, онда нәтиже y мәні болады. Әйтпесе, нәтиже z мәні. X операнда сандық мән болуы керек.

Әрбір оператор шығарған нәтижелер туралы қосымша ақпаратты C нұсқаулығынан қараңыз. Барлық екілік операторлар бірдей ең жоғары деңгейде солдан оңға қарай. Мысалы, команда

expr 4 * 2 <7

0 қайтарады.

&& , || , және : операторларда «ленивый бағалау» бар, C сияқты, яғни нәтижені анықтау үшін қажет болмаса, операндалар бағаланбайды. Мысалы, командада

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

тек [a] немесе [b] мәндерінің біреуі $ v мәніне байланысты бағаланады. Алайда, егер бұл бүкіл өрнек жақшаға алынған болса ғана бұл дұрыс; әйтпесе, Tcl талдаушы expr пәрменін шақырудан бұрын [a] және [b] екеуін де бағалайды.

Математикалық функциялар

Tcl келесі өрнектердегі математикалық функцияларды қолдайды:

abs cosh log sqrt acos қос log10 srand asin exp pow tan atan қабат rand tanh atan2 fmod round ceil hypot sin cos int sinh

abs ( arg )

Arg мәнінің абсолютті мәнін береді. Арг бүтін немесе өзгермелі нүкте болуы мүмкін және нәтиже бірдей түрде қайтарылады.

acos ( arg )

[0, pi] диапазонында арг косинусын береді. Арг [-1,1] ауқымында болуы керек.

асин ( арг )

Арка синін [-pi / 2, pi / 2] радиандарының ауқымында қайтарады. Арг [-1,1] ауқымында болуы керек.

атан ( арг )

[-pi / 2, pi / 2] диапазонында арканың доғаның аргенін береді.

atan2 ( х, у )

Y / x доғасының тангенсін, [-pi, pi] радиандарының ауқымында келтіреді. x және y екеуі де 0 болмайды.

ceil ( arg )

Ең аз бүтін мәнін argдан кем емес береді.

cos ( arg )

Радианмен өлшенген аргонның косинусын береді.

cosh ( арг )

Арг гиперболалық косинусын береді. Егер нәтиже асып кетсе, қате қайтарылады.

қос ( арг )

Егер arg - өзгермелі мән болса, arg параметрін қайтарады, әйтпесе arg өзгермелі түрлендіреді және айнымалы мәнді қайтарады.

exp ( арг )

E ** arg ретінде анықталған argтың экспоненталын береді. Егер нәтиже асып кетсе, қате қайтарылады.

қабат ( арг )

Аргтен үлкен емес интегралды мәнді береді.

fmod ( x, y )

X бөлу бойынша бөлу нүктесінің қалдықты қайтарады. Егер y 0 болса, қате қайтарылады.

гипот ( х, у )

Оң жақ бұрышты үшбұрыштың гипотенузасының ұзындығын есептейді ( x * x + y * y ).

int ( arg )

Егер arg - бүтін мән болса, arg мәнін қайтарады, әйтпесе аргументті бүтін санға түрлендіріп, айналдырылған мәнді қайтарады.

log ( arg )

Аргтың табиғи логарифмін береді. Арг оң мән болуы керек.

log10 ( arg )

Арганың базалық 10 логарифмін береді. Арг оң мән болуы керек.

қуат ( x, y )

X мәніне көтерілген x мәнін есептейді. Егер x теріс болса, y бүтін сан болуы керек.

rand ()

Нөлден өзгермелі нүкте нөмірін бірден аз немесе математикалық тұрғыда ауқым [0,1] мәніне қайтарады. Тұқым машинаның ішкі сағатынан келеді немесе srand функциясымен қолмен орнатылады.

дөңгелек ( арг )

Егер arg - бүтін мән болса, arg мәнін қайтарады, әйтпесе айнымалы бүтін айналдыру арқылы айналдырады және айналдырылған мәнді қайтарады.

sin ( arg )

Радианмен өлшенген аргонның синусын қайтарады.

sinh ( arg )

Арг гиперболалық синусын береді. Егер нәтиже асып кетсе, қате қайтарылады.

sqrt ( арг )

Аргтің шаршы түбірін қайтарады. Arg теріс емес болуы керек.

srand ( arg )

Толық бүтін сан болуы керек арна , кездейсоқ сандар генераторының тұқымын қалпына келтіру үшін пайдаланылады. Бұл тұқымнан бірінші кездейсоқ санды қайтарады. Әр аудармашының өз тұқымдары бар.

тан ( арг )

Радианмен өлшенетін аргументтерді қайтарады.

танх ( арг )

Арганың гиперболалық тангенсін береді.

Осы алдын ала анықталған функцияларға қосымша, қосымша функцияларды Tcl_CreateMathFunc () көмегімен анықтауға болады.

Түрлері, асып кету және дәлдік

Барлық ішкі есептеулер бүтін санға байланысты C ұзындығымен жасалады және өзгермелі нүктеге қатысты барлық ішкі есептеулер C типті қосарланған жолмен жасалады . Жолды өзгермелі нүктеге түрлендіргенде, экспонент асып кету анықталады және Tcl қатесіне әкеледі. Жолдан бүтін санға айналдыру үшін, асып кетуді анықтау жергілікті C кітапханасындағы кейбір кіші әрекеттердің әрекеттеріне байланысты, сондықтан оны сенімсіз деп санауға болады. Кез келген жағдайда, толығымен асып кету және толып тастау әдетте аралық нәтижелерге сенімді түрде анықталмайды. Көбейту нүктесі толып кету және толып кету аппараттық құралдармен қамтамасыз етілген дәрежеге дейін анықталады, бұл әдетте өте сенімді.

Толық, өзгермелі нүкте және жол операндтары үшін ішкі көріністер арасында түрлендіру қажет болғанда автоматты түрде жасалады. Арифметикалық есептеулер үшін бүтін сандар өзгермелі нүкте енгізілгенге дейін пайдаланылады, содан кейін өзгермелі нүкте қолданылады. Мысалға,

expr 5/4

1 қайтарады

expr 5 / 4.0 expr 5 / ([жолдың ұзындығы «abcd»] + 0.0)

екеуі де 1.25 қайтарады. Жыпарлау нүктесінің мәндері әрқашан `` `қайтарылады . '' немесе ' e ', олар бүтін мәндер ретінде көрінбейді. Мысалға,

20.0 / 5.0 нұсқасын көрсетіңіз

4.0 емес, 4 мәнін қайтарады.

Жолдық операциялар

Синтинг мәндерін салыстыру операторларының операндалары ретінде қолдануға болады, бірақ өрнек бағалаушы салыстыруды бүтін немесе өзгермелі нүкте ретінде жасауға тырысады. Егер салыстыру операндаларының бірі жол, ал екіншісі сандық мән болса, сандық операнд бүтін сандар үшін C sprintf пішімінің спецификациясы және өзгермелі нүкте мәндері үшін % g пайдаланып жолға айналдырылады. Мысалы, командалар

expr {«0x03»> «2»} expr {«0y» <«0x12»}

екеуі де қайтарылады. Бірінші салыстыру бүтін салыстыру арқылы жасалады, ал екіншісі екінші операнд 18 жолына түрлендірілгеннен кейін жолды салыстыру арқылы жасалады. Tcl-ны құндылықтарды мүмкіндігінше санауға болатын үрдісінің арқасында, егер сіз шынымен салыстыруды қаласаңыз және операндтардың мәндері ерікті болуы мүмкін болса, == сияқты операторларды пайдалану идеясы мүлдем жақсы емес; Бұл жағдайда жолдың командасын пайдалану жақсы.

Өнімділік мәселелері

Жақсы жылдамдық пен ең аз сақтау талаптары үшін тіреулерге өрнектерді алыңыз. Бұл Tcl библиотека құрастырушысына ең жақсы кодты жасауға мүмкіндік береді.

Жоғарыда айтылғандай, өрнектер екі рет ауыстырылады: бір рет Tcl талдаушы және бір рет expr пәрмені арқылы. Мысалы, командалар

3 жиынтығын орнатыңыз b {$ a + 2} expr $ b * 4

11-ді қайтару емес, 4-тен көп емес. Себебі Tcl талдаушы алдымен $ a + 2 айнымалы мәніне ауыстырады, сонда expr командасы $ a + 2 * 4 өрнегін бағалайды.

Көптеген өрнектер екінші ауыстыру ретін қажет етпейді. Немесе олар қапсырмаларға салынған немесе жоқ болса, олардың ауыспалы және командалық алмастырғыштары ауыспалы сандар немесе өздеріне алмастыруларды талап етпейтін жолдар. Дегенмен, бірнеше білінбейтін сөз тіркестерін алмастырудың екі раунды қажет болғандықтан, библиотека құрастырушысы осы жағдайды шешу үшін қосымша нұсқауларды шығаруы керек. Ең қымбат код командалық ауыстыруды қамтитын алынбаған өрнектер үшін қажет. Бұл өрнектер өрнек орындалатын сайын жаңа кодты құру арқылы орындалуы керек.

Кілт сөздер

арифметикалық, логикалық , салыстыру, сөйлеу, анық емес салыстыру

Маңызды: Жеке компьютерде пәрменді қалай пайдалану керектігін көру үшін man ( % man ) пәрменін пайдаланыңыз.