Linux / Unix სარდლობის: expr

სახელი

გამოხატვა - გამოხატვა გამოხატვა

სინოფსისი

expr arg ? arg arg ... ?

უკავშირდება არგს (მათ შორის გამყოფი სივრცეების დამატება), აფასებს შედეგს Tcl გამოხატულებად და დააბრუნებს მნიშვნელობას. Tcl გამოცემებში ნებადართული ოპერატორები არიან C- ს გამოცემებში დაშვებული ოპერატორების შემცვლელი და მათ აქვთ იგივე მნიშვნელობა და უპირატესობა, როგორც შესაბამისი C ოპერატორები. გამონათქვამები თითქმის ყოველთვის გამოყოფენ რიცხვურ შედეგებს (რიცხვი ან მცურავი პუნქტიანი ღირებულებები). მაგალითად, გამოხატულება

expr 8.2 + 6

აფასებს 14.2. Tcl გამონათქვამები განსხვავდება C გამონათქვამების მიხედვით, რომლებიც მითითებულია ოპერაციების შესახებ. გარდა ამისა, Tcl გამოხატვა მხარს უჭერს არა რიცხვითი ოპერაციებისა და სიმებიანი შედარებებისა.

მუშაობს

Tcl გამოხატულება შედგება ოპერაციების, ოპერატორების და ფრჩხილების კომბინაციისაგან. თეთრი სივრცე შეიძლება გამოყენებულ იქნას ოპერაციებსა და ოპერატორებსა და ფრჩხილებს შორის; ის იგნორირებულია გამოხატვის მითითებით. თუ შესაძლებელია, ოპერატორები განიხილება, როგორც მთელი რიცხვითი მნიშვნელობები. რიცხვითი მნიშვნელობები შეიძლება განისაზღვროს ათობითი (ნორმალური შემთხვევა), ოქტურში (თუ ოპერატორის პირველი სიმბოლოა 0 ), ან თექვსმეტიმით (თუ ოპერატორის პირველი ორი სიმბოლო 0x ). იმ შემთხვევაში, თუ ოპერატს არ გააჩნია ზემოთ მოცემული ერთ-ერთი ფორმატის ფორმა, მაშინ იგი ითვლება მცურავი პუნქტის რიცხვით, თუ ეს შესაძლებელია. მცურავი პუნქტის ციფრები შეიძლება განისაზღვროს ANSI- ის კომპლიგერის მიერ მიღებული ნებისმიერი ფორმით (გარდა F , F , L და L ფუძეების უმეტესობებში). მაგალითად, ყველა ჩამოთვლილია მცურავი წერტილის ნომრები: 2.1, 3., 6e4, 7.91e + 16. თუ რიცხვითი ინტერპრეტაცია არ არის შესაძლებელი, მაშინ ოპერია დარჩა როგორც სიმებიანი (და მხოლოდ შეზღუდული ოპერატორის გამოყენება შესაძლებელია).

ოპერაციები შეიძლება განისაზღვროს რომელიმე შემდეგიდან:

[1]

როგორც რიცხვითი მნიშვნელობა, ან მთელი რიცხვი ან მცურავი პუნქტი.

[2]

როგორც Tcl ცვლადი, სტანდარტული $ ნოტაციის გამოყენებით. ცვლადის ღირებულება გამოყენებული იქნება როგორც ოპერა.

[3]

როგორც სიმებიანი თანხვედრა ორმაგი შეთავაზებები. გამოხატვის პერევანი შეასრულებს კოპირებათა შორის ინფორმაციის შეცვლის, ცვლადისა და ცვლადის შეცვლას და გამოიყენებს შედეგების მნიშვნელობას ოპერაციად

[4]

როგორც string თანდართული braces. ღია ბრჭყალებსა და უახლოვ მჭიდრო ბრჭყალებს შორის სიმბოლოები გამოყენებული იქნება როგორც ოპერატის გარეშე.

[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} <"სიტყვა $ a"} 0

ოპერატორები

მოქმედი ოპერატორები ქვემოთ ჩამოთვლილია, დაჯგუფებულია უპირატესობის შემცირების მიზნით:

- + ~!

Unary მინუსი, unary პლუს, ცოტა ბრძენი არ, ლოგიკური არ არის. არცერთი ოპერაცია არ შეიძლება გამოყენებულ იქნას სიმებიანი ოპერაციებისთვის და ცოტა ბრძენი არ შეიძლება გამოყენებულ იქნას მხოლოდ რიცხვებით.

* /%

გამრავლების, გაყოფა, დარჩენილი. არცერთი ოპერაცია არ შეიძლება გამოყენებულ იქნას სიმებიან ოპერაციებზე და დანარჩენი შეიძლება გამოყენებულ იქნას მხოლოდ რიცხვებით. დანარჩენი ყოველთვის იგივე ნიშანია, როგორც გამყოფი და აბსოლიტური ღირებულება, ვიდრე გამყოფი.

+ -

დამატება და გამოკლება. ძალაშია ნებისმიერი რიცხვითი ოპერატორისთვის.

<< >>

მარცხენა და მარჯვენა ცვლა. ძალაშია მხოლოდ მთლიანი რიცხვებისთვის. მარჯვენა გადაადგილება ყოველთვის პროპაგანდავს ნიშანი ცოტა.

<> <=> =

ლოგიკური ნაკლებად, უფრო დიდი, ნაკლები ან ტოლი, და მეტი ან ტოლია. თითოეული ოპერატორი აწარმოებს 1, თუ მდგომარეობა მართალია, 0 ან სხვაგვარად. ეს ოპერატორები შეიძლება გამოყენებულ იქნას როგორც სიმებიან, ისე რიცხვითი ოპერაებით, რომელთა შემთხვევაშიც გამოიყენება სიმებიანი შედარება.

==! =

ლოგიკური ტოლია და არ არის თანაბარი. თითოეული ოპერატორი აწარმოებს ნულოვანი / ერთი შედეგით. მოქმედებს ყველა ოპერატორის ტიპები.

&

Bit- ბრძენი და. ძალაშია მხოლოდ მთლიანი რიცხვებისთვის.

^

Bit- ის ჭკვიანი ექსკლუზიური OR. ძალაშია მხოლოდ მთლიანი რიცხვებისთვის.

|

Bit- ბრძენი OR. ძალაშია მხოლოდ მთლიანი რიცხვებისთვის.

&&

ლოგიკური და. აწარმოებს 1 შედეგს, თუ ორივე ოპერატორი არ არის ნულოვანი, 0 ან სხვაგვარად. მოქმედებს ლოგიკური და რიცხვითი (რიცხვები ან მცურავი პუნქტი) მოქმედებს მხოლოდ.

||

ლოგიკური OR. აწარმოებს 0 შედეგს, თუ ორივე ოპერაცია ნულოვანია, 1 სხვაგვარად. მოქმედებს ლოგიკური და რიცხვითი (რიცხვები ან მცურავი პუნქტი) მოქმედებს მხოლოდ.

x ? y : z

თუ - მაშინ - სხვანაირად, როგორც C. თუ x აფასებს ნულოვანი, მაშინ შედეგი არის y- ის მნიშვნელობა. წინააღმდეგ შემთხვევაში, შედეგი არის . X ოპერატს უნდა ჰქონდეს რიცხვითი მნიშვნელობა.

იხილეთ C სახელმძღვანელო დაწვრილებითი ინფორმაცია თითოეული ოპერატორის მიერ წარმოებული შედეგების შესახებ. ყველა ორობითი ოპერატორის ჯგუფი მარცხნივ მარჯვნივ იმავე უპირატესობის დონეში. მაგალითად, ბრძანება

expr 4 * 2 <7

ბრუნდება 0.

&& , || , და ?: ოპერატორებს აქვთ "ზომიერი შეფასება", ისევე, როგორც C- ს, რაც იმას ნიშნავს, რომ ოპერაციები არ არის შეფასებული, თუ ისინი არ არის საჭირო შედეგზე დადგენა. მაგალითად, ბრძანება

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

მხოლოდ ერთი ან [ბ] იქნება შეფასებული, რომელიც დამოკიდებულია $ V- ის ღირებულებით . შენიშვნა, თუმცა, ეს მხოლოდ ჭეშმარიტებაა, თუ მთელი გამოხატვა თან ერთვის კბილებს; წინააღმდეგ შემთხვევაში, Tcl parser შეაფასებს როგორც [a] და [b] სანამ expr ბრძანება.

მათემატიკის ფუნქციები

Tcl მხარს უჭერს შემდეგ მათემატიკურ ფუნქციებს გამონათქვამებში:

abs cosh log sqrt acos ორმაგი log10 srand asin exp pow tan atan სართული rand tanh atan2 fmod მრგვალი ცეცხლი ჰიპოტი ცოდნა cos int sinh

აბს ( არგ )

აბრუნებს არგის აბსოლუტურ მნიშვნელობას. Arg შეიძლება იყოს მთელი რიცხვი ან მცურავი წერტილი, და შედეგი დაბრუნდა იგივე ფორმით.

აკოზი (არგუსი )

აბრუნებს არგ კოსიას არგს , [0, pi] რადიანს. Arg უნდა იყოს დიაპაზონი [-1,1].

ასინი ( არგ )

აბრუნებს არგ-ს არინ სენსორულ სპექტრი [-pi / 2, pi / 2] რადიანს. Arg უნდა იყოს დიაპაზონი [-1,1].

atan ( არგ )

აბრუნებს არგ-ს arc tangent, დიაპაზონში [-pi / 2, pi / 2] radians.

atan2 ( x, y )

აბრუნებს y / x- ს arc tangent- ში [-pi, pi] რადიანს. x და y არ შეიძლება იყოს 0.

ჭერი ( არგ )

აბრუნებს ყველაზე პატარა რიცხვის მნიშვნელობას არანაკლებ არგზე .

cos ( არგ )

აბრუნებს რადიოს კოზიას , რომელიც იზომება რადიანებში.

cosh ( არგ )

აბრუნებს არგუსის ჰიპერბოლური კოსინით . თუ შედეგი გამოიწვევს overflow, შეცდომა დაბრუნდა.

ორმაგი ( არგ )

თუ არგ არის floating ღირებულება, დააბრუნებს არგ , სხვაგვარად აკონვერტებს მცდელობებს მცურავი და დააბრუნებს მოაქცია ღირებულება.

exp ( არგუმენტი )

აბრუნებს არგ- ის გაფართოებას, განსაზღვრული, როგორც e ** arg . თუ შედეგი გამოიწვევს overflow, შეცდომა დაბრუნდა.

სართული ( არგ )

აბრუნებს უდიდეს განუყოფელ მნიშვნელობას არგუმზე მეტი.

fmod ( x, y )

დააბრუნებს x- ის დაყოფის მცდელობას თუ y 0 არის, შეცდომა დაბრუნდა.

ჰიპოტი ( x, y )

შეესაბამება მარჯვენა კუთხე სამკუთხედის ( x * x + y * y ) ჰიპოტენუზის სიგრძე.

int ( არგ )

თუ არგ არის მთელი რიცხვი, დააბრუნებს არგს , სხვაგვარად აკონვერტებს არგუმენტს მთვარეზე და დააბრუნებს გარდამავალი მნიშვნელობა.

შესვლა ( არგ )

აბრუნებს არგის ბუნებრივი ლოგარითმი. Arg უნდა იყოს დადებითი მნიშვნელობა.

log10 ( არგ )

აბრუნებს არგის ბაზის 10 ლოგარითმს Arg უნდა იყოს დადებითი მნიშვნელობა.

pow ( x, y )

აანალიზებს x- ის მნიშვნელობას ძალაუფლებისთვის. თუ x არის უარყოფითი, y უნდა იყოს მთელი რიცხვი.

rand ()

აბრუნებს ნულოვანი წერტილის რიცხვს ერთი ან ნაკლები, მათემატიკური თვალსაზრისით, სპექტრი [0,1]. თესლი მოდის აპარატის შიდა საათისგან ან შეიძლება დაისვენოს სარურული ფუნქციით.

მრგვალი ( არგ )

თუ არგ არის მთელი რიცხვი, დააბრუნებს არგს , სხვაგვარად აკონვერტებს მრგვალებით დამრგვალებას და დააბრუნებს კონვერტირებულ მნიშვნელობას.

ცოდვა ( არგ )

აბრუნებს რადიას , რომელიც იზომება რადიებზე.

ცოდვა ( არგ )

აბრუნებს არგუსის ჰიპერბოლური სინის თუ შედეგი გამოიწვევს overflow, შეცდომა დაბრუნდა.

sqrt ( არგ )

აბრუნებს არგრის კვადრატულ ფესვს. Arg უნდა იყოს არასამთავრობო უარყოფითი.

srand ( არგ )

არგუმენტი , რომელიც უნდა იყოს მთელი რიცხვი, გამოყენებულია შემთხვევითი რიცხვების გენერატორისთვის თესლის გადაყენება. აბრუნებს ამ შემთხვევის პირველი შემთხვევითი რიცხვი. თითოეულ თარჯიმანს აქვს საკუთარი თესლი.

tan ( არგ )

აბრუნებს რაგებს , რომლებიც იზომება რადიებზე.

tanh ( არგ )

აბრუნებს არგუსის ჰიპერბოლური tangent.

ამ წინასწარგანსაზღვრული ფუნქციების გარდა, აპლიკაციებმა შესაძლოა დამატებითი ფუნქციები განსაზღვრონ Tcl_CreateMathFunc ().

სახეები, overflow და სიზუსტე

ყველა შიდა გამოთვლითი ჩართვა მთელი რიცხვი C ტიპისაა და ყველა შიდა გამოთვლითი ჩართულია მცურავი პუნქტით C ტიპის ორმაგი . როდესაც მცურავი წერტილის სიმაგრის კონვერტირება ხდება, გაფართოების overflow გამოვლენილია და იწვევს Tcl შეცდომას. სიღრმეზე რიცხვის კონვერტაციის მიზნით, ლოკალიზაციის გამოვლენა დამოკიდებულია ადგილობრივ C ბიბლიოთეკაში გარკვეული რუტინული ქმედებების ქცევაზე, ამიტომ იგი არასანდოდ ითვლება. ნებისმიერ შემთხვევაში, მთლიანად გადადინება და ჩავარდნა საერთოდ არ არის გამოვლენილი საიმედოდ შუალედური შედეგები. მცურავი-წერტილი overflow და underflow აღმოჩენილი ხარისხი მხარდაჭერილი აპარატურა, რომელიც ზოგადად საკმაოდ საიმედო.

კონვერსია შორის შიდა წარმომადგენლობების მთელი რიცხვი, მცურავი პუნქტი და სიმებიანი ოპერაციები ავტომატურად ხორციელდება. არითმეტიკული გამოთვლებისთვის გამოიყენება რიცხვები, სანამ ზოგიერთი მცურავი პუნქტი შემოდის, რის შემდეგაც გამოიყენება მცურავი პუნქტი. მაგალითად,

expr 5/4

ბრუნდება 1, ხოლო

expr 5 / 4.0 expr 5 / ([string სიგრძე "abcd"] + 0.0)

ორივე დაბრუნების 1.25. მცურავი პუნქტის ღირებულებები ყოველთვის დაბრუნდა `` . '' ან e ისე, რომ არ გამოიყურებოდეს მთელი რიცხვებით. მაგალითად,

expr 20.0 / 5.0

ბრუნდება 4.0 და არა 4 .

სიმებიანი ოპერაციები

სიზუსტის ფასეულობები შეიძლება გამოყენებულ იქნეს, როგორც შედარებით ოპერატორების ოპერაციები, თუმცა გამოხატვის შემფასებელი ცდილობს შეადაროთ შედარებები როგორც რიცხვი, ან მცურავი პუნქტი, როდესაც მას შეუძლია. თუ შედარების ერთ-ერთი ოპერატორია სიმებიანი და მეორე რიცხვითი მნიშვნელობით, რიცხვითი ოპერაცია კონვერტირებულია თავში სიგანეზე C- ს sprintf- ის ფორმატის სპეციფიკატორი % d- ით, ხოლო გრაფების მაჩვენებლებისთვის. მაგალითად, ბრძანებები

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

ორივე შედარება 1. პირველი შედარება ხორციელდება მთელი შედარებით, ხოლო მეორე კეთდება სიმებიანი შედარებით მეორე ოპერაციის შემდეგ, გარდაიქმნება სიმებიანი 18 . იმის გამო, რომ Tcl- ის ტენდენცია იმდენად, რამდენადაც შესაძლებელი იქნება ნომრის ღირებულების მკურნალობა, არ არის კარგი იდეა, რომ გამოიყენოთ ოპერატორები, როგორიცაა == როდესაც თქვენ ნამდვილად გსურთ სიმებიანი შედარება და ოპერაციების ღირებულებები თვითნებურია; ეს უკეთესია ამ შემთხვევებში გამოიყენოთ სიმებიანი ბრძანება ნაცვლად.

შესრულების საკითხები

აკრძალეთ გამონათქვამები საუკეთესო სიჩქარით და ყველაზე პატარა შენახვის მოთხოვნებისთვის. ეს საშუალებას აძლევს Tcl bytecode შემდგენელი გენერირება საუკეთესო კოდი.

როგორც ზემოთ აღინიშნა, გამონათქვამები ორჯერ შეიცვალა: ერთხელ Tcl- ის მიერ და ექსპრეს ბრძანებით. მაგალითად, ბრძანებები

დააყენეთ 3 კომპლექტი b {$ a + 2} expr $ b * 4

11-ზე, არა მრავალჯერადი 4-ზე. ეს იმიტომ, რომ Tcl parser- ს პირველად შეცვლის $ 2 + ცვლადი ბისთვის , მაშინ expr ბრძანება შეაფასებს გამოხატვის $ 2 + 4 .

გამონათქვამების უმეტესობა არ საჭიროებს შემცვლელების მეორე რაუნდს. ან ისინი ერთმანეთთან აკრეფილია ან, თუ არა, მათი ცვლადი და ბრძანების შემცვლელები გამოიმუშავებენ ნომრებს ან სტრიქონებს, რომლებიც არ მოითხოვენ სათანადო ცვლილებებს. თუმცა, იმის გამო, რომ რამდენიმე ჩანაფიქრი გამონათქვამს ორი ალტერნატივა სჭირდება, ბაიტკოდის შემდგენელს უნდა მიანიჭოს დამატებითი ინსტრუქციები ამ მდგომარეობის გამოსასწორებლად. ყველაზე ძვირადღირებული კოდი საჭიროა შეუზღუდავი გამონათქვამებისთვის, რომელიც შეიცავს ბრძანების შეცვლას. ეს გამონათქვამები უნდა ხდებოდეს ახალი კოდის გენერირებით ყოველი გამოხატვის შესრულებისას.

საკვანძო სიტყვები

არითმეტიკა, ლოგიკური , შედარება, გამოხატულება, საეჭვო შედარება

მნიშვნელოვანია: გამოიყენეთ კაცი ბრძანება ( % man ), რათა ნახოთ თუ როგორ ბრძანება გამოიყენება თქვენს კომპიუტერში.