Spec-Zone.ru › Tcl/Tk

mathop

ИМЯ
mathop — Математические операторы как команды Tcl
СИНТАКСИС
ОПИСАНИЕ
МАТЕМАТИЧЕСКИЕ ОПЕРАТОРЫ
! логическое
+ ?число ...?
- число ?число ...?
* ?число ...?
/ число ?число ...?
% число число
** ?число ...?
ОПЕРАТОРЫ СРАВНЕНИЯ
== ?арг ...?
eq ?арг ...?
!= арг арг
ne арг арг
< ?арг ...?
<= ?арг ...?
> ?арг ...?
>= ?арг ...?
БИТОВЫЕ ОПЕРАТОРЫ
~ число
& ?число ...?
| ?число ...?
^ ?число ...?
<< число число
>> число число
ОПЕРАТОРЫ СПИСКОВ
in арг список
ni арг список
ПРИМЕРЫ
СМОТРИТЕ ТАКЖЕ
КЛЮЧЕВЫЕ СЛОВА

Имя

mathop — Математические операторы как команды Tcl

Синтаксис

package require Tcl 8.5
::tcl::mathop::!число
::tcl::mathop::~число
::tcl::mathop::+ ?число ...?
::tcl::mathop::-число ?число ...?
::tcl::mathop::* ?число ...?
::tcl::mathop::/число ?число ...?
::tcl::mathop::%число число
::tcl::mathop::** ?число ...?
::tcl::mathop::& ?число ...?
::tcl::mathop::| ?число ...?
::tcl::mathop::^ ?число ...?
::tcl::mathop::<<число число
::tcl::mathop::>>число число
::tcl::mathop::== ?арг ...?
::tcl::mathop::!=арг арг
::tcl::mathop::< ?арг ...?
::tcl::mathop::<= ?арг ...?
::tcl::mathop::>= ?арг ...?
::tcl::mathop::> ?арг ...?
::tcl::mathop::eq ?арг ...?
::tcl::mathop::neарг арг
::tcl::mathop::inарг список
::tcl::mathop::niарг список

Описание

Команды в пространстве имен ::tcl::mathop реализуют тот же набор операций, что и поддерживает команда expr. Все они экспортируются из пространства имен, но по умолчанию не импортируются в другие пространства имен. Обратите внимание, что переименование, пере реализация или удаление любой из команд в пространстве имен не изменяет способ работы команды expr, а также не определяет никаких новых команд в пространстве имен ::tcl::mathop.

Поддерживаются следующие операторы команд:

~

!

+

-

*

/

%

**

&

|

^

>>

<<

==

eq

!=

ne

<

<=

>

>=

in

ni

Математические операторы

Поведение математических операторных команд таково:
! логическое
Возвращает логическое отрицание логического, где логическое может быть любым числовым значением или любой другой формой булевого значения (т.е. возвращает истину, если аргумент ложь или ноль, и ложь, если аргумент истина или ненулевой).
+ ?число ...?
Возвращает сумму произвольного количества аргументов. Каждый аргумент число может быть любым числовым значением. Если аргументов нет, результат будет ноль (тождество суммирования).
- число ?число ...?
Если задан только один аргумент число, возвращает отрицание этого числового значения. В противном случае возвращает число, которое получается при вычитании всех последующих числовых значений из первого. Все аргументы число должны быть числовыми значениями. Должен быть задан хотя бы один аргумент.
* ?число ...?
Возвращает произведение произвольного количества аргументов. Каждый число может быть любым числовым значением. Если аргументов нет, результат будет один (единица умножения).
/ число ?число ...?
Если задан только один аргумент число, возвращает обратную величину этого числового значения (т.е. значение, полученное путём деления 1.0 на это значение). В противном случае возвращает число, которое получается при делении первого числового аргумента на все последующие числовые аргументы. Все аргументы число должны быть числовыми значениями. Должен быть задан хотя бы один аргумент.

Обратите внимание, что при использовании целых чисел в качестве аргументов, для промежуточных результатов будет использоваться целочисленное деление (т.е. к промежуточным результатам будут применены функции floor и int в указанном порядке). Если все значения в операции являются целыми числами, результат будет целым числом.

% число число
Возвращает целое значение модуля (т.е. остаток) первого аргумента относительно второго. Каждый число должен иметь целочисленное значение. Также знак результата будет таким же, как и знак второго число, которое не должно быть нулём.

Обратите внимание, что Tcl определяет эту операцию точно даже для отрицательных чисел, поэтому следующая команда возвращает истинное значение (опустив пространство имен для ясности):

== [* [/ x y] y] [- x [% x y]]
** ?число ...?
Возвращает результат возведения каждого значения в степень результата рекурсивной операции над результатом обработки следующих аргументов, так «** 2 3 4» равно «** 2 [** 3 4]». Каждый число может быть любым числовым значением, хотя второе число не должно быть дробным, если первое отрицательное. Если аргументов нет, результат будет один, а если аргумент один, то результат будет равен этому аргументу. Результат будет иметь целое значение только тогда, когда все аргументы будут целочисленными значениями.

Операторы сравнения

Поведение команд операторов сравнения (большинство из которых предпочтительно работают с числовыми аргументами) таково:
== ?arg ...?
Возвращает значение, обозначающее, равны ли каждый аргумент аргументам по обе стороны от него в смысле оператора expr == (т.е., численное сравнение, если возможно, в противном случае точное сравнение строк). Если предоставлено менее двух аргументов, эта операция всегда возвращает истинное значение.
eq ?arg ...?
Возвращает значение, обозначающее, равны ли каждый аргумент аргументам по обе стороны от него с использованием точного сравнения строк. Если предоставлено менее двух аргументов, эта операция всегда возвращает истинное значение.
!= arg arg
Возвращает значение, обозначающее, не равны ли два аргумента друг другу в смысле оператора expr != (т.е., численное сравнение, если возможно, в противном случае точное сравнение строк).
ne arg arg
Возвращает значение, обозначающее, не равны ли два аргумента друг другу с использованием точного сравнения строк.
< ?arg ...?
Возвращает значение, обозначающее, упорядочены ли произвольно много аргументов, причём каждый последующий аргумент должен быть строго больше предыдущего. Сравнения предпочтительно выполняются над числовыми значениями, в противном случае используются сравнения строк в кодировке Юникод. Если присутствует менее двух аргументов, эта операция всегда возвращает истинное значение. Если аргументы являются числовыми, но должны сравниваться как строки, следует использовать команду string compare.
<= ?arg ...?
Возвращает значение, обозначающее, упорядочены ли произвольно много аргументов, причём каждый последующий аргумент должен быть равен или больше предыдущего. Сравнения предпочтительно выполняются над числовыми значениями, в противном случае используются сравнения строк в кодировке Юникод. Если присутствует менее двух аргументов, эта операция всегда возвращает истинное значение. Если аргументы являются числовыми, но должны сравниваться как строки, следует использовать команду string compare.
> ?arg ...?
Возвращает значение, обозначающее, упорядочены ли произвольно много аргументов, причём каждый последующий аргумент должен быть строго меньше предыдущего. Сравнения предпочтительно выполняются над числовыми значениями, в противном случае используются сравнения строк в кодировке Юникод. Если присутствует менее двух аргументов, эта операция всегда возвращает истинное значение. Если аргументы являются числовыми, но должны сравниваться как строки, следует использовать команду string compare.
>= ?arg ...?
Возвращает значение, обозначающее, упорядочены ли произвольно много аргументов, причём каждый последующий аргумент должен быть равен или меньше предыдущего. Сравнения предпочтительно выполняются над числовыми значениями, в противном случае используются сравнения строк в кодировке Юникод. Если присутствует менее двух аргументов, эта операция всегда возвращает истинное значение. Если аргументы являются числовыми, но должны сравниваться как строки, следует использовать команду string compare.

Битовые операторы

Поведение команд битовых операторов (все из которых работают только с целочисленными аргументами) таково:
~ number
Возвращает битовое отрицание number. Number может быть целым числом любого размера. Обратите внимание, что результат этой операции всегда будет иметь противоположный знак входному number.
& ?number ...?
Возвращает битовое И каждого из произвольного количества аргументов. Каждый number должен иметь целочисленное значение. Если аргументов нет, результат будет минус один.
| ?number ...?
Возвращает битовое ИЛИ каждого из произвольного количества аргументов. Каждый number должен иметь целочисленное значение. Если аргументов нет, результат будет ноль.
^ ?number ...?
Возвращает битовое ИСКЛЮЧАЮЩЕЕ ИЛИ каждого из произвольного количества аргументов. Каждый number должен иметь целочисленное значение. Если аргументов нет, результат будет ноль.
<< number number
Возвращает результат битового сдвига первого аргумента влево на количество битов, указанное во втором аргументе. Каждый number должен иметь целочисленное значение.
>> number number
Возвращает результат битового сдвига первого аргумента вправо на количество битов, указанное во втором аргументе. Каждый number должен иметь целочисленное значение.

Операторы списков

Поведение команд, ориентированных на списки, таково:
in arg list
Возвращает значение, обозначающее, присутствует ли значение arg в списке list (в соответствии с точным сравнением элементов как строк).
ni arg list
Возвращает значение, обозначающее, отсутствует ли значение arg в списке list (в соответствии с точным сравнением элементов как строк).

Примеры

Чаще всего операторы используются с использованием пути пространства имен для обеспечения их доступности. Это выгодно тем, что не влияет на набор команд, определённых текущим пространством имен.
namespace path {::tcl::mathop ::tcl::mathfunc}

# Compute the sum of some numbers
set sum [+ 1 2 3]

# Compute the average of a list
set list {1 2 3 4 5 6}
set mean [/ [+ {*}$list] [double [llength $list]]]

# Test for list membership
set gotIt [in 3 $list]

# Test to see if a value is within some defined range
set inRange [<= 1 $x 5]

# Test to see if a list is sorted
set sorted [<= {*}$list]

См. также

expr, mathfunc, namespace

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/mathop.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API