Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       expr - Oblicz wyraenie

SK/LADNIA

       expr arg ?arg arg ...?
_________________________________________________________________

OPIS

       Lczy kolejne parametry arg (dodajc midzy nimi spacje) i analizuje wynik
       jako wyraenie Tcl, zwracajc warto. Dozwolone wyraenia Tcl s  podzbiorem
       operatorow  dozwolonych  w  wyraeniach  C  i maj takie samo znaczenie i
       pierwszestwo, jak odpowiadajce im operatory  C.   Wyraenia  daj  prawie
       zawsze  wyniki  numeryczne  (calkowite,  lub  zmiennoprzecinkowe).  Np.
       wyraenie
              expr 8.2 + 6
       przechodzi w 14.2.  Wyraenia Tcl roni si od wyrae C tym, e  operandy  s
       podawane  w  inny  sposob.  Poza  tym,  wyraenia  Tcl obsluguj operandy
       nienumeryczne oraz porownania lacuchow.

OPERANDY

       Wyraenie Tcl sklada si z kombinacji operandow, operatorow  i  nawiasow.
       Midzy  operandami  i  operatorami  mona  uywa  bialych  spacji;  s  one
       ignorowane. Tam gdzie mozliwe, operandy s interpretowane  jako  wartoci
       calkowite. Wartoci calkowite mona podawa dziesitnie (normalny wypadek),
       osemkowo (jeli pierwszym znakiem  operandu  jest  0)  lub  szesnastkowo
       (jeli pierwszymi znakami operandu s 0x).  Jeli operand nie jest w adnym
       z powyszszych formatow calkowitych, to  o  ile  jest  to  moliwe,  jest
       traktowany  jako  liczba zmiennoprzecinkowa. Zmienne zmiennoprzecinkowe
       mog by podawane w dowolny ze sposobow,  obslugiwanych  przez  zgodny  z
       ANSI  kompilator  C  (poza  tym,  e  przyrostki  f, F, l i L w wikszoci
       instalacji nie bd dozwolone).  Na przyklad, wszystkie nastpujce  liczby
       s  poprawnymi  liczbami  zmiennoprzecinkowymi:  2.1, 3., 6e4, 7.91e+16.
       Jesli  nie  jest  moliwa  interpretacja  numeryczna,  to  operand  jest
       pozostawiany  jako  lacuch (wtedy jednak mona stosowa tylko ograniczony
       zestaw operatorow).

       Operandy mog by podawane w nastpujce sposoby:

       [1]    Jako warto numeryczn, calkowit albo zmiennoprzecinkow.

       [2]    Jako zmienn Tcl,  przy  uyciu  standardowej  notacji  $.   Warto
              zmiennej zostanie wykorzystana jako operand.

       [3]    Jako  lacuch ujty w podwojne cudzyslowy.  Przetwarzanie wyraenia
              bdzie wraliwe na podstawienia ukonikowe, zmiennych i  komend,  i
              uyje wyniku jako operandu.

       [4]    Jako lacuch ujty w nawiasy klamrowe. Znaki midzy klamr otwierajc
              i zamykajc zostan uyte jako operand bez adnego podstawiania.

       [5]    Jako komenda Tcl  w  naiwasach  kwadratowych.  Komenda  zostanie
              wykonana, a jej wynik uyty jako operand.

       [6]    Jako   funkcja  matematyczna,  ktorej  argumenty  maj  dowoln  z
              powyszych postaci, taka  jak  sin($x).  Zobacz  niej  dla  listy
              zdefiniowanych funkcji.

       Tam  gdzie  zachodz  podstawienia,  s  one  dokonywane przez instrukcje
       wyraenia.  Jednak mogl te zosta ju wykonany inny  poziom  podstawiania,
       dokonywany  przez  przetwarzacza  polece przed wywolaniem przetwarzacza
       wyrae.  Jak pokazuje ponisza dyskusja,  zwykle  najlepiej  jest  ujmowa
       wyraenia  w  klamry,  co  zapobiega  by  przetwarzacz dokonal podstawie
       zawartoci.

       Dla pewnych przykladow prostych wyrae, zalomy e zmienna a ma warto 3, a
       zmienna b warto 6.  Nastpnie, komenda po lewej stronie kadej z linii da
       wynik, widoczny po prawej stronie.
              expr 3.1 + $a           6.1
              expr 2 + "$a.$b"        5.6
              expr 4*[llength "6 2"]  8
              expr {{word one} < "word $a"}0

OPERATORY

       Poniej wymienione s  prawidlowe  operatory;  s  one  zgrupowane  wedlug
       malejcego priorytetu:

       -  +  ~  !          Jednoargumentowy   minus,   jednoargumentowy  plis,
                           bitowy NOT i logiczny NOT.  aden z tych  operatorow
                           nie  moe  by  stosowany do operandow lacuchowych, a
                           bitowy  NOT  moe  by  stosowany  tylko   do   liczb
                           calkowitych.

       *  /  %             Mnoenie,  dzielenie, reszta. aden z tych operatorow
                           nie moe by stosowany do  operandow  lacuchowych,  a
                           reszta moe by stosowana tylko do liczb calkowitych.
                           Reszta  ma  zawsze  znak  dzielnika  i  jej   warto
                           absolutna jest zawsze mnijesza ni warto dzielnika.

       +  -                Dodawanie  i  odejmowanie. Prawidlowe dla dowolnych
                           operandow numerycznych.

       <<  >>              Przesuwanie w lewo i w prawo. Prawidlowe tylko  dla
                           operandow   calkowitych.    Przesuwanie   w   prawo
                           propaguje bit znaku.

       <  >  <=  >=        Logiczny  mniejszy,  wikszy,  mniejszy  lub  rowny,
                           wikszy  lub  rowny.   Kady  operator  daje  1  jeli
                           warunek jest spelniony lub 0 w przeciwnym  wypadku.
                           Operandami mog by zarowno wartoci numeryczne, jak i
                           lacuchowe,  w  ktorym   wypadku   dokonywane   jest
                           porownywanie lacuchow.

       ==  !=              Logiczna rowno i nierowno. Kady operator daje wynik
                           zero/jeden.  Prawidlowe dla wszelkich operandow.

       &                   Bitowy  AND.   Prawidlowy   tylko   dla   operandow
                           calkowitych.

       ^                   Bitowy   XOR.   Prawidlowy   tylko   dla  operandow
                           calkowitych.

       |                   Bitowy   OR.   Prawidlowy   tylko   dla   operandow
                           calkowitych.

       &&                  Logiczny   AND.  Daje  1  jeli  obydwa  operandy  s
                           niezerowe, lub 0 w przeciwnym wypadku.   Prawidlowe
                           dla operandow logicznych i numerycznych.

       ||                  Logiczny  OR.  Daje 0 jeli obydwa operandy s zerowe
                           lub  1  w  przeciwnym   wypadku.   Prawidlowe   dla
                           operandow logicznych i numerycznych.

       x?y:z               Jeeli-to-inaczej,  jak  w  C.  Jeli x rozwija si na
                           warto  niezerow,  to  wynikiem  jest  warto  y.   W
                           przeciwnym wypadku wartoci wynikow jest z.  Operand
                           x musi mie warto numeryczn.

       Zobacz podrcznik C dla dalszych szczegolow o wynikach,  dawanych  przez
       operatory.  Wszystkie  operatory binarne grupuj si od lewej do prawej w
       tym samym priorytecie. Np. komenda
              expr 4*2 < 7
       daje 0.

       Operatory &&, || i ?: maj  ``leniw  analiz'',  zupelnie  jak  w  C,  co
       znaczy,  e  operandy  nie  s analizowane jeli nie ma takiej potrzeby do
       okrelenia wyniku. Np. w komendzie
              expr {$v ? [a] : [b]}
       analizowane bdzie tylko jedno z [a] lub [b],  zalenie  od  wartoci  $v.
       Zauwa  jednak, e jest to prawdziwe tylko jeli cale wyraenie jest ujte w
       nawiasy klamrowe;  w  przeciwnym  wypadku  przetwarzacz  Tcl  przemieli
       zarowno [a] jak i [b] jeszcze przed wywolaniem komendy expr.

FUNKCJE MATEMATYCZNE

       Tcl obsluguje nastpujce funkcje matematyczne wyrae:

       acos    cos     hypot   sinh
       asin    cosh    log     sqrt
       atan    exp     log10   tan
       atan2   floor   pow     tanh
       ceil    fmod    sin

       Kada  z  tych  funkcji wola funkcj biblioteki matematycznej o tej samej
       nazwie. Tcl ponadto implemntuje nastpujce funkcje dla  konwersji  midzy
       liczbami calkowitymi, zmiennoprzecinkowymi i losowania liczb losowych:

       abs(arg)
              Zwraca  warto  modulu  arg.  Arg  moe  by  liczb  calkowit,  lub
              zmiennoprzecinkow; wynik jest zwracany w tej samej postaci.

       double(arg)
              Jeli arg jest liczb  zmiennoprzecinkow,  zwracane  jest  arg.  W
              przeciwnym    wypadku    arg    jest   konwertowany   na   posta
              zmiennoprzecinkow i zwracany w tej postaci.

       int(arg)
              Jak wyej, ale zamiana na liczb calkowit.

       rand() Zwraca liczb zmiennoprzecinkow w zakresie od zera do 1. Nasienie
              pochodzi  z  wewntrznego  zegara  maszyny,  lub moe by ustawiane
              rcznie funkcj srand.

       round(arg)
              Jeli arg jest calkowite, zwracane jest arg. W przeciwnym wypadku
              arg jest konwertowane na posta calkowit poprzez zaokrglanie.

       srand(arg)
              Parametr  arg, ktory musi by liczb calkowit, sluy do resetowania
              nasienia generatora liczb losowych. Zwraca pierwsz  liczb  losow
              dla tego nasienia. Kady interpreter ma swoje wlasne nasienie.

       W  dodatku  do  tych  predefiniowanych funkcji, aplikacje mog definiowa
       inne funkcje, korzystajc z Tcl_CreateMathFunc().

TYPY, PRZEPE/LNIENIE I PRECYZJA

       Wszystkie obliczenia wewntrzne na liczbach calkowitych s  dokonywane  w
       typie  long  z  C,  a  wszystkie obliczenia zmiennoprzecinkowe na typie
       double.   Podczas  konwersji  lacucha   na   liczb   zmiennoprzecinkow,
       wykrywane  jest  przepelnienie  eksponentne,  co powoduje bld Tcl.  Dla
       konwersji lacucha na liczb calkowit, wykrywanie przepelnienia zaley  od
       zachowania  pewnych  funkcji  biblioteki  C, wic raczej nie mona na tym
       polega.

       Konwersja midzy  reprezentacjami  calkowitymi,  zmiennoprzecinkowymi  i
       lacuchowymi operandow jest wykonywana automatycznie tam gdzie potrzeba.
       Dla oblicze arytmetycznych zmienne calkowite s uywane tak dlugo, a  nie
       pojawi  si  liczba  zmiennoprzecinkowa i wtedy zaczyna si uywanie liczb
       zmiennoprzecinkowych.  Na przyklad,
              expr 5 / 4
       zwraca 1, podczas gdy
              expr 5 / 4.0
              expr 5 / ( [string length "abcd"] + 0.0 )
       zwraca 1.25.  Wartoci zmiennoprzecinkowe s zawsze zwracane z ``.''  lub
       e, wic nie wygldaj jak liczby calkowite. Na przyklad,
              expr 20.0/5.0
       zwraca 4.0, nie 4.

OPERACJE /LACUCHOWE

       Jeli  jeden  z  operandow  porownania  jest  lacuchem, a drugi ma warto
       numeryczn, to operand numeryczny jest konwertowany z uyciem formatu  %d
       lub  %g  funkcji  sprintf(3) jzyka C z powrotem na lacuch.  Na przyklad
       komendy
              expr {"0x03" > "2"}
              expr {"0y" < "0x12"}
       zwracaj 1. Pierwsze porownanie jest dokonywane w porownaniu calkowitym,
       a   drugie  w  porownaniu  lacuchowym,  po  przekonwertowaniu  drugiego
       operandu na lacuch 18.  Poniewa Tcl ma tendencje do traktowania wartoci
       tam  gdzie moliwe jako liczby, to uywanie operatorow == i podobnych nie
       jest dobrym  pomyslem,  jeli  naprawd  chcesz  porownania  lacuchowego;
       lepiej uy komendy string compare.

ROZWAANIA O WYDAJNOCI

       Jeli  chcesz jak najwikszej szybkoci i najmniejszego zajmowania pamici, |
       ujmuj wyraenia w klamry. Umoliwia to kompilatorowi  kodu  bitowego  Tcl |
       wygenerowanie jak najlepszego kodu.                                     |

       Jak  wspomniano  wyej,  w  wyraeniach  dokonuje si dwoch podstawie: raz |
       przez przetwarzacz Tcl, raz przez komend expr.  Na przyklad, komendy    |
              set a 3                                                          |
              set b {$a + 2}                                                   |
              expr $b*4                                                        |
       zwracaj 11, a nie wielokrotno 4.  Jest tak dlatego, e przetwarzacz  Tcl |
       najpierw  podstawia  za  $a  +  2  zmienn  b,  a  nastpnie komenda expr |
       przetwarza wyraanie $a + 2*4.                                           |

       Wikszo wyrae nie wymaga drugiej kolejki podstawie. S one albo  ujmowane |
       w klamry, albo ich proces podstawiania zmiennych i komend daje liczby i |
       lacuchy, nie wymagajce podstawie jako takich. Jednak z uwagi na  to,  e |
       nieuklamrowione  wyraenia wymagaj dwoch rund podstawie, kompilator kodu |
       bitowego musi emitowa dodatkowe  instrukcje  obslugi  takiej  sytuacji. |
       Najkosztowniejszy  kod  generowany  jest  dla  nieuklamrowionych wyrae, |
       ktore zawieraj podstawienia komend. Wyraenia te musz by  implementowane |
       przez generowanie nowego kodu za kadym wykonaniem wyraenia.

S/LOWA KLUCZOWE

       arytmetyka, logiczny, porownanie, wyraenie, porownanie rozmyte

INFORMACJE O T/LUMACZENIU

       Powysze  tlumaczenie  pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic  midzy  powyszym
       opisem  a  rzeczywistym  zachowaniem  opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.