Provided by: manpages-pl-dev_0.7-1_all bug

NAZWA

       expr - Oblicz wyrażenie

SKŁADNIA

       expr arg ?arg arg ...?
_________________________________________________________________

OPIS

        Uwaga! To tłumaczenie może być nieaktualne!

       Łączy  kolejne parametry arg (dodając między nimi spacje) i analizuje wynik jako wyrażenie Tcl, zwracając
       wartość. Dozwolone wyrażenia Tcl są podzbiorem operatorów dozwolonych w wyrażeniach C i mają  takie  samo
       znaczenie  i  pierwszeństwo,  jak  odpowiadające  im  operatory  C.   Wyrażenia dają prawie zawsze wyniki
       numeryczne (całkowite, lub zmiennoprzecinkowe). Np. wyrażenie
              expr 8.2 + 6
       przechodzi w 14.2.  Wyrażenia Tcl różnią się od wyrażeń C tym, że operandy są  podawane  w  inny  sposób.
       Poza tym, wyrażenia Tcl obsługują operandy nienumeryczne oraz porównania łańcuchów.

OPERANDY

       Wyrażenie  Tcl składa się z kombinacji operandów, operatorów i nawiasów.  Między operandami i operatorami
       można używać białych spacji; są one ignorowane.  Tam  gdzie  mozliwe,  operandy  są  interpretowane  jako
       wartości  całkowite.  Wartości  całkowite  można  podawać dziesiętnie (normalny wypadek), ósemkowo (jeśli
       pierwszym znakiem operandu jest 0) lub szesnastkowo (jeśli pierwszymi znakami  operandu  są  0x).   Jeśli
       operand  nie  jest w żadnym z powyszszych formatów całkowitych, to o ile jest to możliwe, jest traktowany
       jako liczba zmiennoprzecinkowa. Zmienne zmiennoprzecinkowe mogą  być  podawane  w  dowolny  ze  sposobów,
       obsługiwanych  przez  zgodny  z  ANSI  kompilator  C  (poza  tym,  że przyrostki f, F, l i L w większości
       instalacji nie będą dozwolone).   Na  przykład,  wszystkie  następujące  liczby  są  poprawnymi  liczbami
       zmiennoprzecinkowymi:  2.1,  3.,  6e4,  7.91e+16.   Jesli  nie  jest możliwa interpretacja numeryczna, to
       operand jest pozostawiany jako łańcuch (wtedy jednak można stosować tylko ograniczony zestaw operatorów).

       Operandy mogą być podawane w następujące sposoby:

       [1]    Jako wartość numeryczną, całkowitą albo zmiennoprzecinkową.

       [2]    Jako zmienną Tcl, przy użyciu standardowej notacji $.  Wartość zmiennej zostanie wykorzystana jako
              operand.

       [3]    Jako łańcuch ujęty w podwójne cudzysłowy.  Przetwarzanie wyrażenia będzie wrażliwe na podstawienia
              ukośnikowe, zmiennych i komend, i użyje wyniku jako operandu.

       [4]    Jako łańcuch ujęty w nawiasy klamrowe. Znaki między klamrą otwierającą i zamykającą zostaną  użyte
              jako operand bez żadnego podstawiania.

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

       [6]    Jako funkcja matematyczna, której argumenty mają dowolną z powyższych postaci, taka  jak  sin($x).
              Zobacz niżej dla listy zdefiniowanych funkcji.

       Tam  gdzie  zachodzą  podstawienia, są one dokonywane przez instrukcje wyrażenia.  Jednak mógł też zostać
       już  wykonany  inny  poziom  podstawiania,  dokonywany  przez  przetwarzacza  poleceń  przed   wywołaniem
       przetwarzacza wyrażeń.  Jak pokazuje poniższa dyskusja, zwykle najlepiej jest ujmować wyrażenia w klamry,
       co zapobiega by przetwarzacz dokonał podstawień zawartości.

       Dla pewnych przykładów prostych wyrażeń, załóżmy że zmienna a ma  wartość  3,  a  zmienna  b  wartość  6.
       Następnie, komenda po lewej stronie każdej 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

       Poniżej wymienione są prawidłowe operatory; są one zgrupowane według malejącego priorytetu:

       -  +  ~  !          Jednoargumentowy  minus,  jednoargumentowy  plis, bitowy NOT i logiczny NOT.  Żaden z
                           tych operatorów nie może być stosowany do operandów łańcuchowych, a bitowy  NOT  może
                           być stosowany tylko do liczb całkowitych.

       *  /  %             Mnożenie,  dzielenie,  reszta.  Żaden  z  tych  operatorów  nie może być stosowany do
                           operandów łańcuchowych, a reszta może  być  stosowana  tylko  do  liczb  całkowitych.
                           Reszta  ma  zawsze  znak  dzielnika  i jej wartość absolutna jest zawsze mnijesza niż
                           wartość dzielnika.

       +  -                Dodawanie i odejmowanie. Prawidłowe dla dowolnych operandów numerycznych.

       <<  >>              Przesuwanie  w  lewo  i  w  prawo.  Prawidłowe  tylko  dla   operandów   całkowitych.
                           Przesuwanie w prawo propaguje bit znaku.

       <  >  <=  >=        Logiczny  mniejszy,  większy,  mniejszy lub równy, większy lub równy.  Każdy operator
                           daje 1 jeśli warunek jest spełniony lub 0 w przeciwnym wypadku. Operandami  mogą  być
                           zarówno  wartości  numeryczne,  jak  i  łańcuchowe,  w którym wypadku dokonywane jest
                           porównywanie łańcuchów.

       ==  !=              Logiczna równość i nierówność. Każdy operator daje wynik zero/jeden.  Prawidłowe  dla
                           wszelkich operandów.

       &                   Bitowy AND. Prawidłowy tylko dla operandów całkowitych.

       ^                   Bitowy XOR. Prawidłowy tylko dla operandów całkowitych.

       |                   Bitowy OR. Prawidłowy tylko dla operandów całkowitych.

       &&                  Logiczny  AND. Daje 1 jeśli obydwa operandy są niezerowe, lub 0 w przeciwnym wypadku.
                           Prawidłowe dla operandów logicznych i numerycznych.

       ||                  Logiczny OR. Daje 0 jeśli obydwa operandy są  zerowe  lub  1  w  przeciwnym  wypadku.
                           Prawidłowe dla operandów logicznych i numerycznych.

       x?y:z               Jeżeli-to-inaczej,  jak  w  C.  Jeśli x rozwija się na wartość niezerową, to wynikiem
                           jest wartość y. W przeciwnym wypadku wartością wynikową jest z.  Operand x musi  mieć
                           wartość numeryczną.

       Zobacz  podręcznik  C  dla  dalszych szczegółów 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ę'',  zupełnie  jak  w  C,  co  znaczy,  że  operandy  nie  są
       analizowane jeśli nie ma takiej potrzeby do określenia wyniku. Np. w komendzie
              expr {$v ? [a] : [b]}
       analizowane  będzie  tylko  jedno  z  [a]  lub  [b],  zależnie  od wartości $v. Zauważ jednak, że jest to
       prawdziwe tylko jeśli całe wyrażenie jest ujęte w nawiasy klamrowe; w przeciwnym wypadku przetwarzacz Tcl
       przemieli zarówno [a] jak i [b] jeszcze przed wywołaniem komendy expr.

FUNKCJE MATEMATYCZNE

       Tcl obsługuje następujące funkcje matematyczne wyrażeń:

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

       Każda  z  tych  funkcji woła funkcję biblioteki matematycznej o tej samej nazwie. Tcl ponadto implemntuje
       następujące funkcje dla konwersji między liczbami całkowitymi,  zmiennoprzecinkowymi  i  losowania  liczb
       losowych:

       abs(arg)
              Zwraca  wartość  modułu  arg.  Arg  może  być liczbą całkowitą, lub zmiennoprzecinkową; wynik jest
              zwracany w tej samej postaci.

       double(arg)
              Jeśli arg jest liczbą zmiennoprzecinkową,  zwracane  jest  arg.  W  przeciwnym  wypadku  arg  jest
              konwertowany na postać zmiennoprzecinkową i zwracany w tej postaci.

       int(arg)
              Jak wyżej, ale zamiana na liczbę całkowitą.

       rand() Zwraca  liczbę zmiennoprzecinkową w zakresie od zera do 1. Nasienie pochodzi z wewnętrznego zegara
              maszyny, lub może być ustawiane ręcznie funkcją srand.

       round(arg)
              Jeśli arg jest całkowite, zwracane jest arg. W przeciwnym wypadku arg jest konwertowane na  postać
              całkowitą poprzez zaokrąglanie.

       srand(arg)
              Parametr  arg,  który  musi  być  liczbą całkowitą, służy do resetowania nasienia generatora liczb
              losowych. Zwraca pierwszą liczbę losową dla tego  nasienia.  Każdy  interpreter  ma  swoje  własne
              nasienie.

       W  dodatku  do  tych  predefiniowanych  funkcji,  aplikacje  mogą  definiować inne funkcje, korzystając z
       Tcl_CreateMathFunc().

TYPY, PRZEPEŁNIENIE I PRECYZJA

       Wszystkie obliczenia wewnętrzne na liczbach całkowitych są dokonywane w  typie  long  z  C,  a  wszystkie
       obliczenia  zmiennoprzecinkowe na typie double.  Podczas konwersji łańcucha na liczbę zmiennoprzecinkową,
       wykrywane jest przepełnienie eksponentne, co  powoduje  błąd  Tcl.   Dla  konwersji  łańcucha  na  liczbę
       całkowitą,  wykrywanie  przepełnienia  zależy od zachowania pewnych funkcji biblioteki C, więc raczej nie
       można na tym polegać.

       Konwersja  między  reprezentacjami  całkowitymi,  zmiennoprzecinkowymi  i  łańcuchowymi  operandów   jest
       wykonywana  automatycznie  tam  gdzie potrzeba.  Dla obliczeń arytmetycznych zmienne całkowite są używane
       tak  długo,  aż  nie  pojawi  się  liczba  zmiennoprzecinkowa  i  wtedy  zaczyna   się   używanie   liczb
       zmiennoprzecinkowych.  Na przykład,
              expr 5 / 4
       zwraca 1, podczas gdy
              expr 5 / 4.0
              expr 5 / ( [string length "abcd"] + 0.0 )
       zwraca 1.25.  Wartości zmiennoprzecinkowe są zawsze zwracane z ``.'' lub e, więc nie wyglądają jak liczby
       całkowite. Na przykład,
              expr 20.0/5.0
       zwraca 4.0, nie 4.

OPERACJE ŁAŃCUCHOWE

       Jeśli jeden z operandów porównania jest łańcuchem, a drugi ma wartość numeryczną, to  operand  numeryczny
       jest  konwertowany  z  użyciem  formatu  %d lub %g funkcji sprintf(3) języka C z powrotem na łańcuch.  Na
       przykład komendy
              expr {"0x03" > "2"}
              expr {"0y" < "0x12"}
       zwracają 1.  Pierwsze  porównanie  jest  dokonywane  w  porównaniu  całkowitym,  a  drugie  w  porównaniu
       łańcuchowym,  po  przekonwertowaniu  drugiego  operandu  na  łańcuch  18.   Ponieważ  Tcl ma tendencje do
       traktowania wartości tam gdzie możliwe jako liczby, to używanie operatorów == i podobnych nie jest dobrym
       pomysłem, jeśli naprawdę chcesz porównania łańcuchowego; lepiej użyć komendy string compare.

ROZWAŻANIA O WYDAJNOŚCI

       Jeśli  chcesz  jak  największej  szybkości  i najmniejszego zajmowania pamięci, ujmuj wyrażenia w klamry. │
       Umożliwia to kompilatorowi kodu bitowego Tcl wygenerowanie jak najlepszego kodu.                          │

       Jak wspomniano wyżej, w wyrażeniach dokonuje się dwóch podstawień: raz przez przetwarzacz Tcl, raz  przez │
       komendę expr.  Na przykład, komendy                                                                       │
              set a 3set 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 następnie komenda expr przetwarza wyrażanie $a + 2*4.                                        │

       Większość wyrażeń nie wymaga drugiej kolejki podstawień. Są one albo ujmowane w klamry, albo  ich  proces │
       podstawiania  zmiennych  i komend daje liczby i łańcuchy, nie wymagające podstawień jako takich. Jednak z │
       uwagi na to, że nieuklamrowione wyrażenia wymagają dwóch rund podstawień, kompilator kodu  bitowego  musi │
       emitować  dodatkowe  instrukcje  obsługi  takiej  sytuacji.   Najkosztowniejszy  kod  generowany jest dla │
       nieuklamrowionych wyrażeń, które zawierają podstawienia komend. Wyrażenia  te  muszą  być  implementowane │
       przez generowanie nowego kodu za każdym wykonaniem wyrażenia.

SŁOWA KLUCZOWE

       arytmetyka, logiczny, porównanie, wyrażenie, porównanie rozmyte

INFORMACJE O TŁUMACZENIU

       Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne.
       W razie zauważenia różnic między powyższym opisem a rzeczywistym  zachowaniem  opisywanego  programu  lub
       funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:

              man --locale=C 3tcl expr

       Prosimy   o   pomoc   w   aktualizacji   stron   man  -  więcej  informacji  można  znaleźć  pod  adresem
       http://sourceforge.net/projects/manpages-pl/.