Функции управления процессом вычисления. Функции для проверки условий.


Лабораторная работа №6.

Тема: Функции управления процессом вычисления. Функции для проверки условий. Функции вывода. Работа с примитивами AutoCAD. Их применение.
Цель: Изучить назначение и формат используемых функций, дополнительных функций для выполнения прикладных задач САПР.
Ход работы.
1. Запустить AutoCAD одним из возможных способов. Загрузить Visual LISP.
2. Ознакомиться с другими встроенными функциями языка AutoLISP.
2.4. Рассмотрим функции, используемые для управления процессом вычисления (выполнения) других функций
(COND (<(условие 1)> <(функция 1,1)> [(функция 1,2)]…)
(<(условие N)> <(функция N,1)> [(функция N,2)]…)) — вычисление тех функций, для которых выполняются условия; Проверка проводится для всех условий.
Например:
(SETQ I 5 J 9) ; присваивание значений переменным I и J
(COND ((= I J) (МАХ 5 10 3)) ; определение максимального числа
((< I J) (MIN 5 6 20) ) ; определение минимального числа
((> I J) (* 5 7 78 9))) ; определение произведения чисел
5 ; результат выполнения (вычисления)
(IF (<(условие 1)> <(функция 1)> [(функция 2)]) — если (условие 1) выполняется, то вычисляется (функция 1), иначе (функция 2);
Например:
(SETQ I 5) ; присваивание значений переменной I
(IF (= I 0) (МАХ 5 10 3) ; если I=0, то определение максимального числа
(MIN 5 6 20)) ; иначе определение минимального числа
5 ; результат выполнения (сравнения)
(REPEAT <целое число> <выражение>…) — вычисление выражений заданное число раз;
Например:
(SETQ D 5) ; ; присваивание значений переменной D
(REPEAT 3 ; формирование цикла
(SETQ D (* D 2))) ; присвоить D результаты расчета
40 ; вывод результата расчета
(PROGN <выражение> ..) — вычисление нескольких (группы) выражений там, где допускается вычисление только одного;
Например:
(IF (< С D) (PROGN (SETQ С (* С 2) ) (SETQ D (* D 5))))
(APPLY <‘имя функции> <‘(список аргументов)>) — применение заданной функции к списку аргументов;
Например:
(APPLY ‘+ ‘ (5 10.53 3)) ; вызов функции
18.53 ; результат сложения элементов списка
(MAPCAR <‘имя функции> <‘(список аргументов)>…) — выполнение заданной функции над первыми элементами списков, затем вторыми и т. д.;
Например:
(MAPCAR ‘* ‘ (5 10 3) ‘ (6 7 8) ‘ (1.5 3 5)) ; вызов функции
(45.0 210 120) ; результат вычисления
(FOREACH <переменная> <список> <(функция 1)> <(функция 2)>…) присваивание переменной значения первого элемента списка и вычисление функций, затем второго и т. д.;
Например:
(FOREACH N ‘(0.5 1.0 1.5)
(PRINT (COS N) ) ) ; вычисление COS для каждого
0.877583 ; элемента списка и печать
0.540302 ; результатов расчета
0.070737
(WHILE <(условие)> <(функция 1)> <(функция 2)>…) — вычисление в цикле функций до тех пор, пока выполняется условие;
Например:
(SETQ N 1) ; определение начального значения N
(WHILE (< N 4) ; условие вычисления в цикле
(PRINT (SIN (* 0.2 N))) ; вычисление SIN, печать результата
(SETQ N ( + N 1))) ; определение нового значения N
0.198669 ; результаты расчета
0.389418
0.564642
2.5. Функции проверки выполнения условий
(AND <выражение>…) – логическое И позволяет объединить несколько выражений. Дает результат Т (TRUE), если в списке выражений нет NIL, иначе NIL;
Например:
(AND 10 15.5 «ABC») ; вызов функции
Т ; результат выполнения
(OR <выражение>…) — логическое ИЛИ позволяет перебрать несколько выражений. Дает результат Т, если хотя бы одно Т, иначе NIL;
Например:
(OR NILL «CAD» 15) ; вызов функции
Т ; результат выполнения
(NOT <выражение>…) — логическое НЕТ служит для отрицания высказывания. Позволяет перебрать несколько выражений и дает Т, если имеется хотя бы одно NIL, иначе NIL;
Например:
(SETQ А 15.8)
(NOT A) ; вызов функции
NILL ; результат выполнения
(BOUNDP <АTOM>) – определяет наличие значения в переменной. Дает Т, если <атом> имеет значение, иначе NIL;
Например:
(SETQ В 12.3)
(BOUNDP ‘B) ; вызов функции
Т ; результат выполнения
(NUMBERP <элемент>) – проверяет наличие числа в качестве значения аргумента. Результат Т, если <элемент> число, иначе NIL;
Например:
(NUMBbRP 183.2) ; вызов функции
Т ; результат выполнения
(MINUSP <число>) – функция проверки знака числа. Итог Т, если <число> отрицательное, или NIL (если <число> положительное);
Например:
(MINUSP 9.25) ; вызов функции
NILL ; результат выполнения
(EQUAL <выражение1> <выражение2> [<допуск>]) – функция проверки идентичности выражений (при наличии <допуска> совпадение должно быть в пределах допуска). Результат Т, если оба выражения равны между собой, иначе NIL;
Например:
(EQUAL «ATOM1» «ATOM1» ) ; вызов функции и сравнение двух констант
Т ; результат выполнения
(LISTP <элемент>) – дает Т, если <элемент> список, иначе NIL;
Например:
(LISTP ‘ (D E F) ) ; вызов функции
Т ; результат выполнения
(АТОМ <элемент>) – возвращает Т, если <элемент> атом, иначе NIL;
Например:
(SETQ С ‘(А В D))
(АТОМ С) ; вызов функции
NILL ; результат выполнения
(EQ<выражениеl> <выражение2>) – функция проверки равенства выражений. Дает Т, если результат одного равен результату другого, иначе NIL;
Например:
(SETQ El ‘(X Y Z) E2 ‘(X Y Z))
(EQ El E2) ; вызов функции
NILL ; результат выполнения
(/= <атом1> <атом2>…) – возвращает результат Т, если <атом1> не равен остальным атомам, иначе NIL;
Например:
(/= 7.85 7.74) ; вызов функции
Т ; результат выполнения
(< <атом1> <атом2>…) – функция возвращает Т, если <атом1> меньше <атома2> и т.д. для всех последующих, иначе NIL;
Например:
(< < 5 8 2 ) ; вызов функции
Т ; результат выполнения
(<= <атом1> <атом2>…) – дает Т, если <атом1> меньше или равен всем последующим, иначе NIL;
Например:
(<= 5 8 8) ; вызов функции
Т ; результат выполнения
(= <атом1> <атом2>…) – дает Т, если <атом1> равен всем остальным атомам, иначе NIL.
Например:
(= 8 8 8.0) ; вызов функции
NIL ; результат выполнения
2.6. Функции для вывода данных различного типа:
(WRITE-CHAR <целое число>) – определение и печатание символа ASCII кода на экране;
Например:
(WRITE-CHAR 67) ; после ввода появляется эхо команды,
67 ; и на экран выводится латинская буква С
(WRITE-LINE <текст>) ~ печатание текста без кавычек;
Например:
(WRITE-LINE “text”) ; после ввода появляется эхо команды,
text ; и на экран выводится text
(PRIN1 <выражение>) — печатание и возвращение значения <выражения>; если <выражение> — текст, то в кавычках;
Например:
(PRIN1 (+ 2 5)) ; вызов функции
77 ; выводится результат и «эхо» команды
(PRINC <выражение>) — печатание и возвращение значения <выражения>; если это текст, то без кавычек;
Например:
(PRINC “text”) ; вызов функции
text “text” ; выводится результат и «эхо» команды
(PRINT <выражение>) — печатание с новой строки с последующим пробелом и возвращение значения выражения, текст без кавычек;
Например:
(PRINT «HELLOW») ; вызов функции
HELLOW ; результат выполнения
(WRITE-CHAR <целое число> <F1>) — печатание текста в файл без кавычек, а возвращение в кавычках;
Например:
(SETQF1 (OPEN»C:\\AUTOCAD\\LISP\\WR.LSP» «а»)) (WRITE-CHAR 35 F1)
; печатание символа, ASCII код которого 35 в файл, определяемый дескриптором F1
(WRITE-LINE <TЕKCT> <F1>) — печатание текста в файл <F1> без кавычек, а возвращение в кавычках. Здесь F1 — дескриптор файла;
Например:
(SETQF1 (OPEN»C:\\AUTOCAD\\LISP\\WR.LSP» «а»)) (WRITE-LINE «ХОРОШЕЕ НАЧАЛО» F1) ; печатание текста «ХОРОШЕЕ НАСТРОЕНИЕ» в файл WR.LSP
(PRIN1 <выражение> <F1>) — печатание <выражения> в файл <F1> и возвращение значения <выражения>, текст — в кавычках;
Например:
(PRIN1 «ПРИВЕТ ВСЕМ ПОЛЬЗОВАТЕЛЯМ» F1 )
(PRINC <выражение> <F1>) — печатание в файл <F1> и возвращение значения <выражения>, текст без кавычек;
Например:
(PRINC «Неплохой результат!» F1 )
(PRINT <выражение> <F1>) — печатание в файл <F1> и возвращение значения выражения, текст без кавычек.
Например:
(PRINТ «Повторить?» F1 )
2.7. Функции доступа к примитивам и средствам AutoCAD:
(ENTGET <имя примитива>) — выбирает примитив из базы данных и возвращает его в виде списка в кодах DXF;
(ENTNEXT <имя примитива>) — выбирает следующий примитив из базы данных;
(ENTLAST) — выбирает последний созданный примитив (объект) из базы данных.
Пример. Допустим, что последним мы ввели текстовый объект с такими данными:
Command: TEXT <Enter>
JUSTIFY/STYLE/<START POINT>: 1,4 <Enter>
HEIGHT <0.2000>: 1.5 <Enter>
ROTATION ANGLE <0>: <Enter>
TEXT: Доброе утро <Enter>
TEXT: <Enter>
После вызова функций (ENTLAST) и (ENTGET…) в командной строке AutoCAD получим представление последнего текстового объекта в виде списка DXF.
Command: (SETQ E (ENTGET(ENTLAST))) ;присвоить Е последний созданный примитив
((-1 . <ENTITYNAME: 31D0538>) ; имя примитива
(0 . «TEXT») ; тип объекта (примитива)
(5 . «4F») ; метка
(100 . «ACDBENTITY») ;
(67 . 0) (8 . «0») ; номер слоя и имя слоя
(100 . «ACDBTEXT») ;
(10 1.0 4.0 0.0) ; начальная точка
(40 . 1.5) ; высота
(1 . «Доброе утро») ; текст
(50 . 0.0) ; угол поворота (радианы)
(41 . 1.0) ; степень растяжения
(51 . 0.0) ; угол наклона
(7 . «STANDARD») ; гарнитура шрифта
(71 . 0) ; флаги генерации
(72 . 0) ; тип выравнивания
(11 0.0 0.0 0.0) ; точка выравнивания
(210 0.0 0.0 1.0) ; вектор направления выдавливания
(100 . «ACDBTEXT») ;
(73 . 0) ;
)
(ENTSEL [<подсказка>]) — вызывает имя примитива по указанной точке;
Например:
Command: (SETQ E (ENTSEL «Пожалуйста, выберите примитив: «))
Пожалуйста, выберите примитив: 1,4
(<ENTITYNAME: 31D0538> (1.0 4.0 O.0))
(HANDENT <метка>) — возвращает имя примитива по метке;
Например:
Command: (HANDENT»4F») <ENTITY NAME: 31D0538>
(TEXTBOX…) — возвращает диагональные координаты поля, которое включает текстовый объект. Если использовать предыдущий пример, то результат от вызова функции (TEXTBOX E) будет таким:
Command: (TEXTBOX E)
((0.0 -0.25 0.0) (16.5 1.5 O.0))
(SSGET [<cnoco6 выбора примитивов>][<точка1>[<точка2>]]) — создает набор примитивов:
Возможные варианты:
(SSGET) — запрашивает пользователя произвести выбор и
размещение основных объектов набора
(SSGET «P») — выбирает текущий набор примитивов
(SSGET «L») — выбирает последний примитив
(SSGET «I» — создает набор объектов внутри другого
(SSGET ‘(2 3)) — выбирает примитив, проходящий через точку
(SSGET «W» ‘(0 0) ‘(3 4)) — выбирает примитив в рамке
(SSGET «С» ‘(0 0) ‘(3 4)) — выбирает примитивы, пересекаемые рамкой
(SSGET «X» <фильтр-список>) — выбирает примитивы в соответствии
с фильтром-списком
Фильтр-список — это список точечных пар подобных типу списка, возвращаемых функцией (ENTGET…).
Например:
(SSGET «X» ‘((0 . «CIRCLE»))) ; возвращает набор из кругов
Для функции (SSGET «X»…) доступны следующие коды:
0 — тип примитива;
2 — имя блока для описания блока;
6 — имя типа линии;
7 — имя гарнитуры шрифта текста или атрибутов;
8 — имя слоя;
38 — уровень;
39 — высота;
62 — код цвета (0 по блоку и 256 — по слою);
66 — следующий за атрибутом флаг в описании блока;
210 — вектор направления выдавливания.
(SSLENGTH <набор>) — определяет число примитивов в наборе;
Например:
(SETQ SS1 (SETGET «W» ‘(0 0) ‘(3 4))) ; создание набора
(SSLENGTH SS1) ; определение числа примитивов в нем
(SSNAME <набор> <номер примитива в наборе>) — возвращает имя примитива по номеру примитива в наборе. Первый примитив имеет номер 0;
Например:
(SSNAME SS1 0) ; возвращает имя первого примитива в наборе SS1
(SSADD [<имя примитива>][<набор>]) — добавляет имя примитива в набор;
Например:
(SSADD E1 SS1) ; добавляет примитив с именем Е1 в набор SS1
(SSDEL [<имя примитива>][<набор>]) — удаляет имя примитива из набора;
Например:
(SSDEL E1 SS1) ; удаляет примитив Е1 из набора SS1
(SSMEMB [<имя примитива>][<набор>]) — проверяет наличие примитива в наборе.
Например:
(SSMEMB E1 SS1) ; проверяется, имеется ли примитив Е1 в наборе SS1
2.8. Особые функции, т.е. функции для выполнения особых задач в программе представлены ниже:
(QUOTE <выражение>) — блокировка вычисления выражения:
Например:
(QUOTE (А В С D)) ; вызов функции
(А В С D) ; результат выполнения функции
‘ <выражение> — блокировка вычисления выражения;
Например:
‘ (А В С D E) ; вызов функции
(А В С D E) ; результат выполнения
(EVAL <выражение>) — вычисление любого, правильно составленного выражения (обычно присутствует неявно).
Например, выражения (EVAL (ABS -3.5)) и (ABS -3.5) равносильны;
(DEFUN <имя функции> ([<список аргументов>…] [/<локальная переменная>]) <выражение>…) — определение новой функции: имя функции — это любая последовательность символов; список аргументов — это список переменных, значения которых должны быть определены до выполнения функции; локальные переменные — это переменные, действие которых ограничено данной функцией. Значением функции является значение последнего выполняемого выражения. Память под локальные переменные выделяется только во время вычисления функции;
Например:
(DEFUN SIN2 (X) ; функция под именем SIN2
(* (SIN X) (SIN X))) ; вычисляет SIN в квадрате
(LAMBDA <аргумент> <выражение>…) — определение функции без имени;
Например:
(APPLY ‘ (LAMBDA (X Y} (+ (* X X) (* Y Y))) ‘ (5 3)); применить функцию к списку
34 ; результат выполнения функции без имени
(FINDFILE <«имя файла»>) — поиск файла с данным именем, а возвращение и с именем каталога;
Например:
(FINDFILE «VALl.LSP») ; вызов функции
«C:\\ALISP\\VALl.LSP» ; результат выполнения
(LOAD <«имя файла»>) – функция загрузки файла и выполнения его, имя файла без расширения (подразумевается расширение LSP);
Например:
(LOAD «C:\\ALISP\\VAL1»)
(GETVAR <«имя системной переменной»>) — определение значения системной переменной AutoCAD в данный момент;
Например:
(GETVAR «DIMTXT» ) ; определение высоты символов текста
0.18 ; результат
(SETVAR <«имя системной переменной»> <значение>) — присваивание системной переменной AutoCAD определенного значения;
Например:
(SETVAR «BLIPMODE» 0) ; удаление изображения маркера
(SETVAR «CMDECHO» 0) ; удаление эха команд
(TRACE <имя функции> ..) — выдача результатов выполнения функций;
(UNTRACE <имя функции>…) — конец отслеживания функции.
Примечание! Последние две функции применяются при отладке кода программ (трассировки), т.к. в процессе выполнения включают/отключают работу внутренних функций (с выдачей результатов), входящих в рассматриваемую.
Практическое задание.
1. Изучить действие рассмотренных в работе функций на аналогичных примерах с другими параметрами.
2. Создать программу по заданию, установленному индивидуально преподавателем.

Загрузка...