TCL скриптинг
|
|
corund | Дата: Воскресенье, 23.10.2011, 13:50 | Сообщение # 1 |
Полковник
Группа: Заблокированные
Сообщений: 195
Статус: Offline
| Попытаюсь заносить сюда разные сведения, которые помогут освоить этот язык.
|
|
| |
corund | Дата: Воскресенье, 23.10.2011, 14:01 | Сообщение # 2 |
Полковник
Группа: Заблокированные
Сообщений: 195
Статус: Offline
| Переменные.
Для присвоения значений переменной используется команда set.
Этой команде передаются два параметра: имя переменной и значение. Имя переменной может быть любой длины; регистр символов учитывается. В составе имени допустимы любые символы.
При написании Tcl-программ нет необходимости объявлять переменные перед их использованием.
Интерпретатор создает переменную в тот момент, когда ей необходимо впервые присвоить значение. Для того чтобы обратиться к значению переменной, надо указать перед ее именем символ $
Code set var 5 => 5 set b $var => 5
Вторая команда set, содержащаяся в листинге, присваивает переменной b значение переменной var. (Это называется подстановка).
|
|
| |
corund | Дата: Воскресенье, 23.10.2011, 14:06 | Сообщение # 3 |
Полковник
Группа: Заблокированные
Сообщений: 195
Статус: Offline
| Подстановка может осуществляться несколько другими, более эффективными способами, что очень важно в том случае, когда значением переменной является длинная строка.
Подстановка команд.
Помимо подстановки переменных, в Tcl используется подстановка команд. Вложенные команды помещаются в квадратные скобки. Интерпретатор Tcl воспринимает любую последовательность символов, находящуюся между открывающей и закрывающей квадратной скобкой, как команду.
В процессе интерпретации осуществляется замена выражения в квадратных скобках (включая сами скобки) результатом выполнения вложенной команды.
Code set len [string length foobar] => 6
В листинге приведенное ниже выражение представляет собой вложенную команду. string length foobar Данная команда возвращает длину строки "foobar". (string length - Длина строки "foobar", или кол-во букв в слове "foobar", равное "6", как я понимаю)
При выполнении выражения в первую очередь выполняется вложенная команда. Затем осуществляется подстановка, в результате чего внешняя команда приобретает следующий вид:
Если в составе внешней команды находится несколько вложенных команд, интерпретатор обрабатывает их слева направо. Закрывающая скобка является признаком конца очередной команды. Встретив ее, интерпретатор выполняет команду. Это надо учитывать в тех случаях, когда результат одной команды может влиять на выполнение другой.
|
|
| |
corund | Дата: Воскресенье, 23.10.2011, 14:52 | Сообщение # 4 |
Полковник
Группа: Заблокированные
Сообщений: 195
Статус: Offline
| Математические выражения.
Для разбора и вычисления значений математических выражений используется команда expr.
expr 10/4 => 2.5
Команда expr обрабатывает целые числа, числа с плавающей точкой и логические значения. Результатом выполнения логических операций является значение 0 (false) либо 1 (true). По необходимости целые числа преобразуются в значения с плавающей точкой. Восьмеричные числа начинаются с нуля (например, значение 033 равно целому числу 27). Шестнадцатеричные значения начинаются с символов Ох.
Пример вложенной команды:
Code set x 7 set len [expr [string length foobar] + $x] => 13
Тут сначала высчитывается выражение [string length foobar] (оно равно 6), затем + то, что присвоено переменной x, то есть 6+7=13
При реализации функции expr были приняты меры для обеспечения корректности значений и предотвращения нежелательных преобразований числовых значений в строковые. Разработчики программ, со своей стороны, могут повысить эффективность выполнения операции expr, применяя фигурные скобки для группировки выражений. Это связано с особенностями работы компилятора, преобразующего исходный текст в байтовый код. Более подробно данный вопрос будет рассмотрен далее в этой главе. Пример использования фигурных скобок для повышения быстродействия вычислений приведен в листинге. Все выражения, содержащиеся в этом листинге, составлены корректно.
Code expr {7.2 / 4} set len [expr {[string length foobar] + $x}] set pi [expr {2*asin(l.0)}]
|
|
| |
corund | Дата: Воскресенье, 23.10.2011, 14:55 | Сообщение # 5 |
Полковник
Группа: Заблокированные
Сообщений: 195
Статус: Offline
| Использование встроенных математических функций.
Code set pi [expr 2*asin(1.0)] => 3.1415926535897931
acos(x) Арккосинус х asin(x) Арксинус х atan(x) Арктангенс х atan2(y,x) При преобразовании прямоугольных координат (х,у) в полярные (r,th) atan2 дает th ceil(x) Наименьшее целое значение, большее или равное х cos(x) Косинус х cosh(x) Косинус гиперболический х ехр(х) Экспонента, ех floor(х) Наибольшее целое значение, меньшее или равное х fmod(x,y) Остаток от деления х/у с плавающей точкой hypot(x,y) Возвращает sqrt(x*x + у*у), т.е. компонент г полярных координат log(x) Натуральный логарифм х loglO(x) Логарифм по основанию 10 от х pow(x,y) х в степени у, или ху sin(x) Синус х sinh(x) Синус гиперболический х sqrt(x) Квадратный корень из х tan(x) Тангенс х tanh(x) Тангенс гиперболический х abs (x) Абсолютное значение х double (х) Преобразование х в формат с плавающей точкой int(x) Усечение х до целочисленного значения round(х) Округление х до целочисленного значения rand () Возвращает случайное число с плавающей точкой в интервале от 0.0 до 1.0 srand(x) Определяет х как значение, используемое для инициализации генератора случайных чисел wide(x) Преобразует х в 64-битовое значение wide integer(Tcl 8.4)
|
|
| |
corund | Дата: Четверг, 03.11.2011, 17:18 | Сообщение # 6 |
Полковник
Группа: Заблокированные
Сообщений: 195
Статус: Offline
| Пример скрипта - по команде !обр [слово] выводит его наоборот:
Code bind pub - !обр pub:ddd
proc pub:ddd {nick uhost hand chan text} { set dlina [string length $text];#ляля set endd [string index $text end];#ляля while {$dlina > 0} {;#ляля append endd [string index $text $dlina-2];#ляля incr dlina -1;#ляля } set endd [string tolower $endd 0 end] putserv "privmsg $chan : 4,8Полученное слово - $endd" }
|
|
| |