![]()
![]() ![]()
Мы уже рассмотрели некоторые функции-AutoLISP, встроенные в систему AutoCAD (setq, load, command). В этом разделе освещаются остальные функции. Встроенные функции по своему назначению можно классифицировать следующим образом:
Вопросы создания функций пользователя рассмотрены в разд. 12.5, а особенности работы с объектами рисунка AutoCAD - в разд. 12.6. Полный перечень функций AutoLISP (в алфавитном порядке) приведен в приложении 8. 12.4.1. Арифметические функции К арифметическим относятся следующие функции (вместе с описанием функций приводится их синтаксис):
Все арифметические функции допускают работу с аргументами целого или вещественного типа. Если все аргументы целые, то возвращается целое значение. Если хотя бы один аргумент вещественный, то результатом будет вещественное число. Некоторые арифметические функции допускают вызов без аргументов - в этом случае возвращается 0 (целое число). Примеры: (+1 3) - возвращает 4; (- -2 1.1 0.3) - возвращает - 3.4; (* -2 1.1 0.3) - возвращает - 0.66; (/ -2 1.1 0.3) - возвращает - 6.06061; (/ 5 12) - возвращает 0 (оба аргумента целые!); (1 + 1.1) - возвращает 2.1; (1 - 1.1) - возвращает 0.1; (~ 3) - возвращает - 4; (abs -1.1) - возвращает 1.1. Рассматриваемые в данном разделе функции выполняют различные операции проверок, логические операции, организуют повторения и циклы. Следующие функции выполняют операции сравнения:
При сравнении строк на возрастание (убывание) используются коды буквенно-цифровых знаков строк, начиная с первого, по действующей таблице кодировки символов. Возвращается логическое значение (T или nil), nil эквивалентно значению "ложь". Примеры: (= -10.0 -10 -10.000) - возвращает T; (= "STR56" "str56" "Str56") - возвращает nil; (= "abcde" "abcde") - возвращает Т; (/= -1.0 -1) - возвращает nil; (/= "STR56" "Str56" "Str56") - возвращает T; (/= "abcde" "abcde") - возвращает nil; (< "a" "b" "k") - возвращает T; (> 2 2 30) - возвращает nil; (<= "q" "qa") - возвращает T; (>= "qa" "q") - возвращает T. Следующие функции выполняют логические операции:
Примеры: (and т т nil) - возвращает nil; (and "a" "b" "k") - возвращает T; (or т nil т) - возвращает T: (or "а" "b" "k") - возвращает T; (not nil) - возвращает T; (not 15.88) - возвращает nil; (null ' ()) - возвращает T; (null "Tram") - возвращает nil. Условная операция типа if-then-else (если-то-иначе) осуществляется с помощью функции if: (if <условие> <выражение1> (<выражение2>] ) Типы аргументов: любые. Возвращаемое значение: вычисленное значение <выражение1>, если значение <условие> отлично от nil (nil в логических операциях используется как "ложь"); или значение <выражение2>, если значение <условие> равно nil (когда <выражение2> опущено, тогда вместо <выражение2> возвращается nil). Примеры: (if (> a b) 1 10) - возвращает 1, если a>b, и 10 - в других случаях; (if (= h1 h2) (+ h1 15) (* h1 2.5)) - возвращает результат вычисления выражения (+ h1 15), если значения h1 и h2 равны; иначе- результат вычисления выражения (* h1 2.5); (if (< a b) "a<b") - возвращает строку "а<b" или nil (т.к. <выражение2> опущено); (if nil "Point") - возвращает nil (т. к. <условие> всегда ложно). Если функция if используется для выполнения по условию не одного выражения, а нескольких, то эти выражения следует объединить с помощью функции рrоgп (иначе будет синтаксическая ошибка, вызванная неправильным количеством аргументов при обращении к функции if): (рrоgn <выражение1> <выражение2> ... [<выражениеN>]) Функция объединяет несколько (не менее двух!) выражении в одно, когда по синтаксису языка AutoLISP может использоваться только одно (как в функции if). Типы аргументов: любые. Рассмотрим использование функции progn на таком примере. Пусть при выполнении условия (> а b) нужно выполнить выражения (setq с -1), (setq d (-cab)) и (* d b), а при невыполнении условия - выполнить выражения (setq с 2), (setq d (* а Ь) ) И (* d с). Листинг 12.4. Пример совместного использования функций if и progn (if (> а b) (progn (setq с -1) (setq d (-cab)) (* d b) ); конец progn (progn (setq с 2) (setq d (* а b)) (* d с) ) ; конец progn ); конец if Для удобства чтения в этом фрагменте текста программы в начале некоторых строк добавлены пробелы, чтобы открывающая скобка оказалась на одном уровне с закрывающей, а внутренние выражения были смещены относительно ближайших внешних на две позиции вправо. К закрывающим скобкам даны комментарии, согласно правилам их написания (см. разд. 12.1). Условная операция типа case с любым количеством условий осуществляется с помощью функции cond: (cond (<условие1> [<выражение1> ... ] ) [ (<условие2> [<выражение2> ... ])] ...) Аргументы: любое количество списков, в каждом из которых на первом месте стоит проверяемое условие, а затем следуют выражения, которые должны быть выполнены (вычислены), если это условие оказалось истинным. Возвращаемое значение функции cond - последнее вычисленное выражение. Если вычисляемое выражение отсутствует (не задано в списке), то возвращается результат вычисления последнего аргумента <условие>. Если аргументы функции cond не заданы, то возвращается nil. Примеры: (cond) - возвращает nil; (cond (14)) - возвращает 14. Впрочем, использование функции cond с неполным количеством аргументов не имеет особого смысла. Рассмотрим задачу: переменной mycolor нужно присвоить текстовое значение с наименованием одного из основных цветов AutoCAD ("красный", "желтый", "зеленый", "голубой", "синий") в зависимости от текущего значения переменной сс, которая принимает значения 1, 2, 3, 4, 5. В случае если значение переменной ее оказалось отличным от перечисленных, то переменной mycolor нужно присвоить "" (пустая строка). Листинг 12.5. Пример 1 использования функции cond (setq mycolor (cond ((= cc 1) "красный") ((= cc 2) "желтый") ((= cc 3) "зеленый") ((= cc 4) "голубой") ((= cc 5) "синий") (Т "") ); конец cond ); конец setq Функция setq присваивает переменной mycolor результат вычисления функции cond. Значение, возвращаемое функцией cond, вычисляется по следующей схеме. Сначала рассматривается список, заданный в качестве первого аргумента- ((= cc 1) "красный") - и проверяется условие, являющееся первым элементом этого списка. Если оказалось, что значение переменной cc равно 1 и, значит, первое условие возвращает "истину", то дальнейшее рассмотрение аргументов функции cond не выполняется, а в качестве возвращаемого значения принимается "красный". Если первое условие не вычислилось как "истина", то проверяется второе условие и т. д. В качестве последнего, шестого, условия стоит т (т. е. "истина" при любых значениях), поэтому, если значение переменной cc не совпало с 1, 2, 3, 4, 5, то в качестве возвращаемого значения функции cond будет принято "" (пустая строка). Еще один пример иллюстрирует случай, когда по истинности значения <условие> выполняются несколько операторов. Листинг 12.6. Пример 2 использования функции cond (cond ((= cc 1) (setq abc "красный") (command "_PLINE" "-50,120.45" "97.66,23.124" "45.7,800" "_С") ) ; = cc 1 ((= cc 2) (setq abc "желтый") (command "_CIRCLE" "-50,120.45" "100") ) ; = cc 2 ) ; конец cond В этом примере функция cond проверяет значение переменной cc. Если оно равно 1, то функция setq присваивает переменной abc значение "красный", а затем AutoCAD рисует замкнутую полилинию с тремя вершинами. Если значение cc равно 2, то функция setq присваивает переменной abc значение "желтый", a AutoCAD рисует окружность радиуса 100. Если окажется, что значение cc не равно ни 1, ни 2, то функция cond вернет nil, не изменяя при этом значения переменной abc и не строя никаких новых примитивов AutoCAD. Поскольку функция command является последним выражением, как в первом, так и во втором условиях функции cond, то во всех трех случаях будет возвращено значение nil (nil является возвращаемым значением функции command - см. разд. 12.3). Однако в данном примере функция cond применена не ради возвращаемого значения, а ради изменения значения переменной abc и построения дополнительной полилинии или окружности. Существует несколько проверочных функций, которые проверяют конкретные значения или типы:
Все эти функции возвращают значение т, если аргумент удовлетворяет требуемому условию, и nil - если не удовлетворяет. Примеры: (minusp (-52 24 39)) -возвращает т; (zerop 0.0) - возвращает т; (numberp -10.0) - возвращает т; (numberp "1") - возвращает nil; (listp "1") - возвращает nil; (listp ' (-21.82)) - возвращает т; (boundp ' +) - возвращает т. Функция eq проверяет равенство двух аргументов (аналогична функции =): (eq <аргумент1> <аргумент2>) Типы аргументов: любые. Тип возвращаемого значения: логическое (т, если значения аргументов совпали, и nil, если не совпали). Примеры: (eq -10.0 -10) - возвращает т; (eq о 3) - возвращает nil; (eq "abc" "АBC") - возвращает nil. Функция equal проверяет равенство двух объектов (для чисел и списков из числовых величин равенство проверяется в пределах допуска): (equal <аргумент1> <аргумент2> [<допуск>]) Типы аргументов: любые. Тип возвращаемого значения: логическое (т, если абсолютная величина разности аргументов не превосходит значение аргумента <допуск>, и nil, если не совпали; если <допуск> не задан, то его значение считается равным нулю). Для аргументов, не являющихся числами или списками из чисел, <допуск> не используется. Примеры: (equal -10.0 -10) - возвращает т; (equal 3.000 3.002 0.002) - возвращает т; (equal "font" "font") - возвращает т; (equal ' (1.00 2.13 2.99) ' (1 2.13 3.0) 0.1) - возвращает Т. Функция while позволяет организовывать операции цикла по многократно проверяемому условию: (while <условие> <выражение1> [<выражение2> ... [<выражениеN>] ... ] ) Типы аргументов: любые. Возвращаемое значение функции while: значение <выражением>, когда последнее вычисленное значение аргумента <условие> отлично от nil. При неудачном задании цикл, организуемый с помощью функции while, может оказаться бесконечным. Рассмотрим следующий пример. Пусть надо вычислить значение n! (факториал), т. е. произведение целых чисел от 1 до n. В данном разделе восклицательный знак используется как знак функции факториала. Листинг 12.7. Пример использовании функции while (вычисление факториала) (setq i 1 factorial 1) (while (< i n) (setq i (1+ i)) (setq factorial (* factorial i)) ); конец while Рассмотрим работу примера, когда число n равно 11 (т. е. вычисляется 11!). В программе используются переменные i (это переменная, являющаяся счетчиком цикла) и factorial (переменная, которая накапливает произведение чисел, формирующее факториал). Перед входом в цикл они получают начальные значения - соответственно, 1 и 1 (по определению 1! считается равным 1). Функция while проверяет условие (< i n) для текущего значения i и, если результат вычисления условия отличен от nil, то выполняет внутренние операции (две операции с участием функции setq). Таким образом, при первом входе в цикл i равно 1, проверяемое условие (< 1 n) возвращает значение т ("истина"), и функция while увеличивает i на l (получается i=2) и умножает переменную factorial на i: factorial=l*2 (не что иное как 2!). Далее снова передается управление на вход в цикл (уже при i=2). Проверка условия опять дает результат "истина", поэтому i получает значение 3 (2+1), a factorial - 6 (2*3). И так далее, пока i не станет равным n (11) и программа покинет цикл, не выполняя внутренних операций. Результат: при n=11 factorial=39, 916,800 (запятые разделяют триады цифр). Функция repeat используется для организации цикла с фиксированным количеством повторений: (repeat <количество> [<выражение1> ...] ) Типы аргументов: <количество> - целое число (имеют смысл только положительные числа), <выражение1> - любое выражение. После аргумента <выражение1> могут идти другие выражения, которые нужно выполнить внутри цикла. Возвращаемое значение - значение последнего вычисленного выражения. Если аргумент <количество> имеет нулевое или отрицательное значение, или после аргумента <количество> не заданы выражения, то функция repeat возвращает nil. Переработаем предыдущий пример (см. листинг 12.7) - вместо while воспользуемся функцией repeat. Листинг 12.8. Пример использования функции repeat (вычисление факториала) I (setq i 1 factorial 1) (repeat (1- n) (setq i (1+ i)) (setq factorial (* factorial i)) ); конец repeat Поскольку входные значения i=1 и factorial = l! =1, то остается умножить factorial на 2, 3, ... , n. Количество таких умножении равно n-1, что на языке AutoLISP записывается как (i- n). Остальное работает как в предыдущем примере. К основным вычислительным функциям относятся следующие функции:
Примеры: (fix -10.083) - возвращает -10; (fix 40.45) - возвращает 40; (rem 14 2) - возвращает о (результат целый, т. к. оба аргумента целые); (rem 12.9 3.5) - возвращает 2.4; (max 7 3.4 2.0092) - возвращает 7.о (результат вещественный, поскольку есть вещественные аргументы); (min 7 3.4 2.0092) - возвращает 2.0092; (gcd 42 12) - возвращает б; (angle ' (0 0) ' (50.0 50.0)) - возвращает 0.785398; (distance ' (0 0) ' (250.0 0.0)) - возвращает 250.0; (sqrt 25) - возвращает 5.0; (sin 0.0) - возвращает 0.0; (cos 0.0) - возвращает 1.0; (atan 1) - возвращает 0. 785398; (atan -1 0) - возвращает -1.5708; (ехр 1) - возвращает 2.71828; (expt 2 2) - возвращает 4 (оба аргумента целые); (expt -2 2.0) - возвращает 4.0; (log 1) - возвращает 0.0. К вычислительным можно отнести также функции побитовых операций:
Все функции побитовых операций работают с целыми аргументами и возвращают целые значения. Функция logand (побитовое "и") работает следующим образом. Каждое целое число может быть представлено в двоичном виде (иначе говоря, в виде суммы степеней числа 2, в которой перед степенью 2 стоит множитель 0 или 1; показатель степени в данной сумме может быть от 0 до 30). Например: 5 = 1*2^0 + 0*2^1 + 1*2^2 = 1012 , 3 = 1*2^0 + 1*2^1 + 0*2^2 = 112 31-й (старший) разряд в таком представлении отводится под знак (минусу соответствует 1, плюсу соответствует 0). После перевода всех чисел в двоичное представление, выполняется поразрядная (побитовая) операция "и" по следующему правилу: (logand 0 0)= (logand 1 0)= (logand 0 1)= 0; (logand 1 1) = 1. Если аргументы не заданы, то возвращается 0. Если задан только один аргумент, то возвращается <число1>. Пример: (logand 3 5) - возвращает 1. Функция logior (побитовое "или") работает по следующему правилу: (logior 1 0)= (logior 0 1)= (logior 1 1)= 1; (logior 0 0) = 0. Если аргументы не заданы, то возвращается 0. Если задан только один аргумент, то возвращается <число1>. Примеры: (logior 3 5) - возвращает 7; (logior 2) - возвращает 2. Побитовый сдвиг (функция lsh) выполняется для двоичного представления чисел (по поводу двоичного представления см. функцию logand). Побитовый сдвиг выполняется влево, если аргумент <сдвиг> положителен, и вправо, если - отрицателен. Целые числа могут иметь не более чем 32 бита (нумерация битов от 0 для младшего разряда до 31 - этот разряд является знаковым), поэтому если старшие разряды при сдвиге влево выходят за 31-й разряд, то они теряются. При сдвиге вправо младшие разряды теряются. Если аргументы не заданы, то возвращается о. Если задан только один аргумент или аргумент <сдвиг> равен о, то возвращается <число>. Примеры: (lsh 2 l) - возвращает 4; (lsh 3 30) - возвращает -1073741824. В функции Boole аргумент <оператор> должен иметь значение от 0 до 15, что соответствует 16-ти вариантам булевых функции. Остальные аргументы - произвольные целые числа. Номер любой булевой функции (они все двуместные, т. е. имеют два аргумента, каждый из которых может быть 0 или 1) кодируется следующим образом: если функция для пары (1 1) возвращает 1, то к ее номеру добавляется 1=2^0; если функция для (1 0) возвращает 1, то добавляется 2=2^1; если функция для (0 1) возвращает 1, то добавляется 4=2^2; если функция для (0 0) возвращает 1, то добавляется 8=2^3. При таком кодировании рассмотренные выше функции logand и logior получат номера 1 и 7. Булева функция применяется побитно к аргументам <число1> и <число2>, затем к результату и аргументу <число3> и т. д. Если заданы только два аргумента (<оператор> и <число1>), то возвращается <число1>. Примеры: (Boole 15 -3 45) - возвращает - l; (Boole 8 16 17) - возвращает - 18. 12.4.4. Функции преобразований Функция type позволяет определять тип символа AutoLISP: (type <символ>) Тип аргумента: <символ> (имя функции или переменной). Если аргумент <символ> не является именем функции или переменной с присвоенным значением, то возвращается nil. Другие варианты возвращаемого значения:
Некоторые из перечисленных вариантов возвращаемого значения доступны только при использовании других средств разработки приложений. Типы данных, доступные в Visual LISP, приведены в разд. 12.2. Примеры: (type 15) - возвращает INT; (type l+) - возвращает SUBR; (type "15") - возвращает STR; (type ' (l5 16 17)) - возвращает LIST. К функциям преобразовании относятся следующие:
Примеры: (float 15) - возвращает 15.0; (float -l5) - возвращает -15.0; (itoa -29031) - возвращает "-29031"; (itoa 0) - возвращает "0"; (atoi "-29031") - возвращает -29031; (atof "-29.03l") - возвращает -29. 031. Функция rtos, преобразующая вещественное число в строку, имеет следующие аргументы:
Аргументы <режим> и <точность> имеют тот же смысл и принимают те же значения, что и системные переменные LUNITS и LUPREC. Если аргументы <режим> и <точность> опущены, то в качестве их значений принимаются текущие значения LUNITS и LUPREC. На форму возвращаемого значения может оказывать влияние системная переменная UNITMODE. Допустимые значения аргумента <режим>:
Возвращается строка, являющаяся результатом преобразования аргумента <число> в символьное представление с заданной точностью. Примеры: (rtos 10.9453 1 3) - возвращает "1.095Е+01"; (rtos 10.9453 2 3) - возвращает "10.945". Функция angtof преобразует строку, представляющую значение угла в различных форматах, в вещественное число, являющееся величиной угла в радианах. Функция angtof по своему действию является обратной к функции angtos. Аргументы функции angtof: <строка> - строка, <представление> - целое число. Значения аргумента <представление> соответствуют значениям системной переменной AUNITS. Если аргумент <представление> опущен, то в качестве его значения принимается текущее значение переменной AUNITS. Допустимые значения аргумента <представление>:
Возвращается вещественное значение угла в радианах, для которого аргумент <строка> является строковым представлением (возможно, в другом формате представления углов). Если аргумент <строка> задан в неправильном формате, то возвращается nil. Примеры: (angtof "30" 0) - возвращает 0.523599 (перевод угла из градусов в радианы); (angtof "334.365g" 2) - возвращает 5.25219. Функция angtos преобразует значения угла в радианах в строку, в соответствии с форматом (функция angtos является обратной к функции angtof). Аргументы функции angtos:
Значения аргумента <представление> соответствуют значениям системной переменной AUNITS, значения аргумента <точность> - значениям системной переменной AUPREC. Если аргументы <представление> и <точность> опущены, то в качестве их значений принимаются текущие значения переменных AUNITS и AUPREC. Возвращается строка, являющаяся строковым представлением значения угла. На форму результата оказывает влияние значение системной переменной UNITMODE. Необходимо также учитывать значение переменной ANGBASE. Примеры: (angtos l.00 0) - возвращает "57.296"; (angtos 1 0) - возвращает "57.296"; (angtos 3.14000 0) - возвращает "179.909". Функция distof выполняет преобразование строки, представляющей вещественное значение в одном из форматов линейных единиц, в обычное вещественное число. Функция distof является обратной по отношению к функции rtos. Аргументы: <строка> - строка, представляющая число в одном из форматов; <режим> - целое число, значения которого соответствуют значениям системной переменной LUNITS (см. описание функции rtos). Если аргумент <режим> опущен, то в качестве его значения принимается текущее значение системной переменной LUNITS. Возвращаемое значение: вещественное число. Если аргумент <строка> имеет неправильную структуру, то возвращается nil. Примеры: (distof "l" 2) - возвращает 1.0; (distof "1.0945E+01" l) - возвращает 10.945. Функция trans преобразует координаты точки из одной системы координат (СК) в другую. Аргументы функции:
Аргументы <СК-из> и <СК-в> могут принимать следующие значения:
Цифровой код системы координат может принимать такие значения:
Имеются определенные условия использования этих кодов в аргументах <СК-из> и <СК-в> (иначе говоря, не всякое значение аргумента <ск-из> сочетается с любым значением аргумента <СК-в>, и наоборот). Коды 0 и l могут использоваться в аргументах <СК-из> и <СК-в> в любых сочетаниях. Это означает, что если <СК-из> = 0, то аргумент <СК-в> может быть или любым цифровым кодом (от 0 до 3), или именем примитива, или вектором выдавливания; аналогично: если <СК-в> = о, то аргумент <СК-из> может быть или любым цифровым кодом (от 0 до 3), или именем примитива, или вектором выдавливания. Цифровой код 2 сочетается с разными вариантами, но его интерпретация зависит от цифрового кода другой СК. Если вторая СК имеет код 0 или l, то первая СК (с кодом 2) является ЭСК текущего видового экрана. Если вторая СК имеет код з, то первая СК (с кодом 2) является ЭСК текущего видового экрана в пространстве модели. Цифровой код 3 (ЭСКЛ) используется только в паре с цифровым кодом 2 другой СК (разобран в предыдущем абзаце). Имя примитива в качестве аргумента <СК-из> используется в том случае. когда координаты точки, хранящейся вместе с примитивом (например, начальная или конечная точки отрезка, центр окружности, вершина полилинии и т. п.), нужно пересчитать из системы координат объекта (СКО) в другую СК. В некоторых операциях (например, при работе с функцией entmake) возникает необходимость пересчитать точку в СКО - здесь имя примитива будет фигурировать в качестве аргумента <СК-в>.
Свои преимущества имеет и способ, когда трехмерный вектор выдавливания применяется в качестве аргументов <СК-в> или <СК-из> (например, при проектировании объекта на плоскость с известным вектором нормали). Этот способ не может использоваться для тех объектов, у которых в качестве СКО фигурирует МСК. Возвращаемым значением функции trans является список из трех координат точки (или вектора перемещения) в новой СК. Если значения аргументов <СК-из> и <СК-в> заданы противоречиво, то возвращается nil (например, если функция trans вызывается с цифровым кодом СК, равным 3, из пространства модели, а не из пространства листа). Как было сказано выше, в качестве аргумента <точка> может фигурировать двумерная точка. В этом случае AutoCAD преобразует точку из двумерной в трехмерную, добавляя координату Z по следующему алгоритму. Если задан аргумент <признак> и его значение отлично от nil (т. е. аргумент <точка> интерпретируется не как точка, а как вектор перемещения), то добавляемая координата Z получает значение 0. Если признак не задан или равен nil, то значение координаты Z зависит от аргумента <СК-из> и выбирается по табл. 12.1. Таблица 12.1. Выбор функцией trans координаты Z для двумерной точки
  Рассмотрим пример. Предположим, в качестве ТСК выбрана система координат, у которой оси параллельны осям МСК, а начало находится в точке X=10, Y=10, Z=10. Тогда: (trans '(1 1 1) 0 1) - возвращает (-9.0 -9.0 -9.0); (trans '(1 1 1) 0 1 T) - возвращает (1.0 1.0 1.0). 12.4.5. Функции, работающие со строками К функциям, работающим со строками, относятся следующие:
Примеры: (chr 192) - возвращает "А" (русская буква); (chr 48) - возвращает "0"; (ascii "A") - возвращает 192 (русская буква); (ascii "A") - возвращает 65 (латинская буква); (ascii "ABCDEFGH") - возвращает 65 (все буквенно-цифровые знаки, кроме первого, игнорируются); (read "B C D E F") - возвращает B; (read "23. 55") - возвращает 23.55; (read "10 масса") - возвращает 10; (strcase "AbcdE FGh-38") - возвращает "ABCDE FGH-38"; (strcase "AbcdE FGh-38" Т) - возвращает "abcde fgh-38"; (strcat "Happy N" "ew " "Year") - возвращает "Happy New Year"; (strcat (itoa 12) "-я линия") - возвращает "12-я линия"; (strlen "Happy N" "ew " "Year") - возвращает 14; (strien "Петербург") - возвращает 9; (substr "Happy New Year" 7 3) - возвращает "New"; (substr "Happy New Year" 7) - возвращает "New Year". Функция wcmatch проверяет строку на соответствие образцу (шаблону): (wcmatch <строка> <образец>) Аргументы: <строка> - строка, структуру которой нужно проверить; <образец> - особая строка, определяющая требования к проверяемой структуре. Аргумент <образец> может содержать как обычные алфавитно-цифровые знаки, так и специальные групповые знаки (wild-card-characters), рассматриваемые в табл. 12.2. Можно в строке, определенной аргументом <образец>, задать сразу несколько шаблонов, на соответствие каждому из которых аргумент <строка> будет проверен; шаблоны должны разделяться с помощью запятой. Таблица 12.2. Специальные знаки, которые можно использовать в образце
  В квадратных скобках любой знак рассматривается не как специальный, поэтому его не надо предварять обратным апострофом. Символ "\" является служебным, поэтому его использование отвечает правилам, изложенным в разд. 12.2. Возвращаемое значение: т - если аргумент <строка> соответствует аргументу <образец>, nil - если не соответствует. Примеры: (wcmatch "Happy New Year" "H*") - возвращает T, т. к. проверяемая строка начинается с буквы "Н"; (wcmatch "Happy New Year" "h*") - возвращает nil (при проверке внутри строк символы "Н" и "h" считаются разными); (wcmatch "Happy New Year" "??ppy*, *New*, * * *") - возвращает Т, т. к. все три шаблона соблюдены; (wcmatch "Happy New Year" "*#*") - возвращает nil, т. к. нет ни одной цифры; (wcmatch "Happy New Year" "H[adgt]*") - возвращает Т; (wcmatch "Happy***day" "Happy'*'*'**") - возвращает Т; (wcmatch "Year 2000" "@ea@ [1-6]000") - возвращает Т.
![]() ![]()
электронной версии ©2002 ЦИТ СГГА - издатель Все права защищены. |