Логотип сайта поддержки пользователей САПРО сайте поддержки пользователей САПР Translate to:
Hosting Ukraine

Глава 4 Функции AutoLISPа (4.38 - 4.75)

4.38. (distance <точка1> <точка2>)

Эта функция возвращает расстояние между 2-х мерными точками <точка1> <точка2>, где 2-х мерная точка - это список двух действительных чисел.

Hапример:
      (distance '(1.2 2.5) '(7.7 2.5))          возвращает  6.700000
      (distance '(1.0 2.0) '(3.0 4.0))          возвращает  2.828427

4.39. (eq <выражение1> <выражение2>)

Эта функция определяет идентичны ли <выражение1> и <выражение2>, т.е. они фактически относятся к одному объекту (например, с помощью SETQ). EQ возвращает Т, если оба выражения идентичны, иначе nil. Типичное применение функции - для определения являются ли два списка фактически одним.

Hапример, зададимся следующими допущениями:
      (setq f1 '(a b c))
      (setq f2 '(a b c))
      (setq f3 f2)
тогда:
      (eq f1 f3)        возвращает  nil  (f1 и f3 не одно и то же)
      (eq f3 f2)        возвращает  T    (f3 и f2 один и тот же список)
Смотри так же функцию EQUAL ниже.

4.40. (equal <выражение1> <выражение2>)

Это функция определяет равны ли <выражение1> и <выражение2>, т.е. их значение является одно и то же.

Hапример, зададимся следующими допущениями:
      (setq f1 '(a b c))
      (setq f2 '(a b c))
      (setq f3 f2)
тогда:
      (equal f1 f3)     возвращает  T    (значением f1 и f3 является однои то же)
      (equal f3 f2)     возвращает  T    (f3 и f2 в точности один и тот же список)

Отметим, что в то время, как два списка EQUAL, они могут не быть EQ, атомы, которые EQUAL всегда к тому же EQ. Добавим, что два списка, которые EQ, всегда EQUAL.

4.41. (eval <выражение>)

Функция возвращает результат выражения <выражение>, где <выражение> - любое выражение языка LISP.

Hапример, дано:
      (setq a 123)
      (setq b 'a)
тогда:
      (eval 4.0)              возвращает  4.000000
      (eval (abs -10))        возвращает  10
      (eval a)                возвращает  123
      (eval b)                возвращает  123

4.42. (exp <число>)

Эта функция вычисляет е в степени <число> (натуральный антилогарифм), возвращает действительное число.

Hапример:
      (exp 1.0)               возвращает  2.718282
      (exp 2.2)               возвращает  9.025013
      (exp -0.4)              возвращает  0.670320

4.43. (expt <основание> <степень>)

Эта функция возвращает <основание>, возведенное в указанную <степень>. Если оба аргумента целые, то результат - целое число. В любом другом случае, результат - действительное число.

Hапример:
      (expt 2 4)              возвращает  16
      (expt 3.0 2.0)          возвращает  9.000000

4.44. (fix <число>)

Функция возвращает преобразование <числа> в целое. <Число> может быть как целым, так и действительным. Если оно действительное, то оно усекается до ближайшего целого путем отбрасывания дробной части.

Hапример:
      (fix 3)                 возвращает  3
      (fix 3.7)               возвращает  3

4.45. (float <число>)

Функция возвращает преобразование <числа> в действительное. <Число> может быть как целым, так и действительным.

Hапример:
      (float 3)               возвращает  3.000000
      (float 3.7)             возвращает  3.700000

4.46. (foreach <имя> <список> <выражение>...)

Эта функция, проходя по <списку>, присваивает каждому элементу <имя> и вычисляет каждое <выражение> для каждого элемента в списке. Может быть задано любое число <выражений>. FOREACH выдает результат последнего, вычисленного <выражения>.

Hапример:
      (foreach n '(a b c) (print n))
эквивалентно:
      (print a)
      (print b)
      (print c)
кроме того, что FOREACH возвращает результат только последнего вычисленного выражения.

4.47. (gcd <число1> <число2>)

Функция возвращает наибольший общий делитель <числа1> и <числа2>. <Число1> и <число2> должны быть целыми.

Hапример:
      (gcd 81 57)             возвращает  3
      (gcd 12 20)             возвращает  4

4.48. (getangle [<точка>] [<подсказка>])

Эта функция создает паузу для того, чтобы пользователь ввел угол. <Подсказка> - факультативная запись для высвечивания на экране в качестве подсказки, а <точка> - факультативная 2-х мерная базовая точка. Вы можете задать угол путем набора числа на клавиатуре в текущих для AutoCADa единицах измерения. Заметим, что, несмотря на то, что текущая единица измерения угла может быть градус, град, или какая либо еще, функция всегда возвращает угол в радианах.

Вы можете так же "показать" AutoLISPу угол путем указания двух 2-х мерных точек на экране. AutoCAD нарисует "резиновую" линию от первой точки к текущему положению курсора для того чтобы визуализировать угол. Факультативный аргумент GETANGLE - <точка> (если указывается) подразумевается как первая из этих двух точек, позволяя тем самым вам "показать" AutoLISPу угол, указывая на следующую точку.

Hиже приведены примеры функции GETANGLE.
      (setq ang (getangle))
      (setq ang (getangle '(1.0 3.5))
      (setq ang (getangle "Which way? "))             /"В какую сторону? "/
      (setq ang (getangle '(1.0 3.5) "Which way? "))  /"В какую сторону? "/

Вы не можете ввести другое выражение LISPa, как ответ на запрос функции GETANGLE. При попытке сделать так, появится сообщение "Can't reenter AutoLISP " /"Hе могу войти в AutoLISP"/. Cмотрите также GETORIENT INITGET.

4.49. (getcorner <точка> [<подсказка>])

GETCORNER возвращает точку, так же как GETPOINT. Однако для GETCORNER требуется <базовая точка> и функция строит прямоугольник от <базовой точки> в то время как пользователь передвигает курсор по экрану. Смотрите GETROINT и INITGET для уточнения. Вы не можете ввести другое LISP-выражение в ответ на запрос GETCORNER.

4.50. (getdist [<точка>] [<подсказка>])

Эта функция создает паузу для того, чтобы пользователь ввел расстояние. [<подсказка>] - факультативная запись для высвечивания на экране в качестве подсказки, <точка> - факультативная базовая точка. Вы можете указать расстояние, набрав число на клавиатуре в текущих для AutoCADa единицах измерения. Заметим, какими бы ни были текущие единиц измерения (например, футы или дюймы), функция всегда возвращает расстояние как действительное число.

Вы можете так же "показать" AutoLISPу расстояние , указав две точки на экране. AutoCAD рисует "резиновую" линию от первой точки до текущего положения курсора для того, чтобы визуализировать расстояние. Факультативный аргумент GETDIST <точка> подразумевается как первый из этих двух точек, позволяя вам "показать" AutoLISPу расстояние, путем указания в любую другую точку. Hиже приведены примеры функции GETDIST:

      (setq dist (getdist))
      (setq dist (getdist '(1.0 3.5))
      (setq dist (getdist "How far? "))                     /"Kак далеко? "/
      (setq dist (getdist '(1.0 3.5) "How far? "))          /"Kак далеко? "/

Вы не можете ввести другое LISP-выражение как ответ на запрос GETDIST. Смотрите также INITGET.

4.51. (getint [<подсказка>])

Эта функция ожидает ввода пользователем целого числа и возвращает его. <Подсказка> - факультативная запись для высвечивания на экране в качестве подсказки.

Hапример:
      (setq num (getint))
      (setq num (getint "Enter a number: "))    /"Введите число: "/

Вы не можете ввести другое LISP-выражение на запрос GETINT. Смотрите также INITGET.

4.52. (getkword [<подсказка>])

Эта функция запрашивает ключевое слово у пользователя. Список имеющих смысл ключевых слов задается прежде чем вызывается функция GETKWORD, пользуясь функцией INITGET (описывается ниже). GETKWORD возвращает ключевое слово, соответствующее введенному пользователем как строковую константу. AutoCAD переспросит, если введенное не является одним из заданных ключевых слов. Пустой ввод возвращает nil (если позволяется вводить пустой ввод). Если не было установлено ни одного ключевого слова также возвращается nil.

Hапример:
      (initget 1 "Yes No")
      (setq x (getkword "Are you sure? (Yes or No) "))
                              /"Вы уверены? (Да или Hет) "/

запросит пользователя и установит в символ Х либо "Yes", либо "No", в зависимости от его ответа. Если ввод не соответствует ни одному ключевому слову, или же пользователь ответил пустым вводом, AutoCAD попросит пользователя повторить ввод еще раз. Вы не можете ввести другое LISP-выражение на запрос GETKWORD. Смотрите также INITGET.

4.53. (getorient [<точка>] [<подсказка>])

В AutoLISPe углы всегда представляются в радианах с нулевым направлением слева направо (восток) и углы откладываются против часовой стрелки. Таким образом, должны иметь месть некоторые изменения, если пользователь хочет выбрать отсчет в градусах или желает изменить направление отсчета углов, используя команду UNITS или системные переменные ANGBASE и ANGDIR. GETRIENT похожа на GETANGLE-функцию, но отличается от нее тем, что измеряет углы в градусах и направление отсчета углов определяется другим способом чем в GETANGLE. GETANGLE используется, если вам необходим суммарный угол (относительный угол), в то время как GETORIENT используется для достижения ориентации (абсолютный угол). Предположим, что была использована команда AutoCADa UNITS для выбора отсчета градусах и нулевое направление -90 (север), отсчет градусов в направлении часовой стрелки. В таблице указаны значения, которые возвращают GETANGLE и GETORIENT (в радианах), если пользователем введены указанные значения (в градусах):

Введено
(градусы)
GETANGLE GETORIENT
0 0.000000 1.570796
-90 1.570796 3.141593
180 3.141593 4.712389
90 4.712389 0.000000

Kак видно из таблицы, GETANGLE предпочитает направление приращения угла, но игнорирует направление нуля градусов. Так, вы можете использовать GETANGLE при повороте вставляемого блока, т.к. введение нуля градусов будет всегда возвращать ноль радиан. С другой стороны, GETORIENT воспринимает как направление нуля градусов, так и направление приращения угла. Так, вы можете использовать GETORIENT для введения таких углов, как угол базовой линии для команды ТЕХТ. Hапример, указанная выше установка UNITS укажет направление базовой линии обычной горизонтальной строки текста на 90 градусов.

Вы не можете ввести другое LISP-выражение в качестве ответа на запрос GETORIENT. Смотрите также GETANGLE и INITGET.

4.54. (getpoint [<точка>] [<подсказка>])

Эта функция запрашивает от пользователя точку <точка>. Факультативный аргумент - базовая [<точка>] и [<подсказка>] - факультативная запись для высвечивания на экране в качестве подсказки. Вы можете ввести точку путем указания ее на экране или записав координаты в текущих единицах измерения. Если присутствует аргумент <точка>, AutoCAD нарисует "резиновую" линию от этой точки до текущего положения курсора.

Hапример:
      (setq p (getpoint))
      (setq p (getpoint "Where? "))                         /"Где? "/
      (setq p (getpoint '(1.5 2.0) "Second point: "))       /"Вторая точка: "/

Обычно, GETPOINT возвращает 2-х мерную точку (список из двух действительных чисел). Используя функцию INIGET для установки контрольного символа "3-х мерная точка", вы можете заставить GETPOINT возвращать 3-х мерную точку (список из трех действительных чисел).

Вы не можете ввести иное LISP-выражение в ответ на запрос GETPOINT. Смотрите также GETCORNER и INITGET.

4.55. (getreal [<подсказка>])

Эта функция запрашивает пользователя ввести действительное число и возвращает его. <Подсказка>-необязательный аргумент для высвечивания на экране в виде подсказки.

      (setq val (getreal))
      (setq val (geyrial "Scale factor: "))           /"Масштабный фактор: "/

Вы не можете ввести иное LISP-выражение в ответ на запрос GETREAL. Смотрите также INITGET.

4.56. (getstring [<cr>] [<подсказка>])

Эта функция запрашивает пользователя ввести строковую константу и возвращает этот константу. Если <cr> присутствует и не nil, вводимый поток может содержать пробелы (и должен, следовательно, оканчиваться RETURN). Иначе ввод текста (строковой константы) будет прерван пробелом RETURN. <Подсказка> - факультативный аргумент для высвечивания на экране в виде подсказки.

Hапример:
      (setq s (getstring))
      (setq s (getstring "What's your fist name? "))        /"Ваше имя? "/
      (setq s (getstring T "What's your full name? "))      /"Ваше полное имя? "/

Если пользователь должен ввести одну из специальных опций (ключевых слов), вместо функции GETSTRING, может быть использована функция GETWORD, описанная выше.

Вы не можете ввести иное LISP-выражение как ответ на запрос GETSTRING.

4.57. (getvar <имя переменной>)

Эта функция возвращает значение системной переменной AutoCADa. Имя переменной должно быть заключено в кавычки ("имя").

Hапример, предположим, что радиус сопряжения был недавно определен в 0.25 единиц:
      (getvar "FILLETRAD")          возвращает  0.250000

Если вы используете GETVAR с неизвестным AutoCADу именем переменной, функция возвратит nil. Список текущих системных переменных AutoCADa можно найти в приложении А руководства по AutoCADу. Смотрите также функцию SETVAR.

4.58. (graphscr)

Эта функция переключает экран с текстового режима в графический в системах с одним экраном (также как функциональная клавиша "FLIP SCREEN" в AutoCADe). GRAPHSCR всегда возвращает nil. Смотрите так же функцию TEXTSCR.

4.59. (if <текст-выражение> <выражение-тогда> [<выражение-иначе>])

Эта функция исполняет выражение по условию. Если <тест-выражение> не nil, тогда исполняется <выражение-тогда>, иначе исполняется <выражение-иначе>. Последнее выражение <выражение-иначе> не обязательно. IF возвращает значение выбранного выражения; если <выражение-иначе> отсутствует и <тест-выражение> nil, IF возвращает nil.

Hапример:
      (if (= 1 3) "Yes!!" "no.")          возвращает  "no."
      (if (= 2 (+ 1 1) "Yes!!")           возвращает  "Yes!!"
      (if (= 2 (+ 3 4) "Yes!!")           возвращает  nil

4.60. (initget [<биты>] [<строка>])

Эта функция устанавливает различные опции для использования последующими функциями GETxxx (кроме GETSTRING и GETVAR). INITGET всегда возвращает nil. <Биты> - факультативный аргумент - целое число со следующими значениями:

INITGET Значения
1 запрещен ввод недействительных чисел
2 запрещен ввод 0
4 запрещен ввод отрицательных чисел
8 не контролируются пределы, даже при включенном LIMCHECK
16 возвращение 3-х мерных точек, предпочтительнее, чем 2-х мерных точек.
32 применяется пунктир для изображения "резиновой" линии или рамки.

Биты могут добавляться вместе в любой комбинации, чтобы сформировать значение от 0 до 63. (Последующие версии AutoLISPа могут включать дополнительные контрольные биты, так что избегайте указывать незадокументированные биты). Если пользователь, вводя забыл одно или более заданных условий (так, например, ввел 0, когда ввод 0 запрещен), AutoCAD высветит ошибку и предложит пользователю повторить ввод.

Например:
      (initget (+ 1 2 4))
      (setq age (getint "How old are you? "))   /"Сколько Вам лет? "/

спросит возраст пользователя, автоматически повторяя запрос, если пользователь ответил пустым вводом, ввел отрицательное или нулевое значение. Если нет аргумента <биты>, подразумевается 0 (нет условий). Специальные контрольные значения обеспечиваются теми GETxxx функциями, для которых они имеют смысл, как показано в следующей таблице.

Контрольный бит со значением 32 воспринимается функциями GETPOINT, GETCORNER, GETDIST, GETANGLE и GETORIENT когда присутствует аргумент <базовая точка>, и устанавливает режим использования пунктирной (или по-другому подсвеченной) линии в качестве "резиновой" линии или рамки, отрисовываемых курсором от заданной базовой точки. Если системная переменная POPUPS равна нулю, указывая тем самым, что драйвер дисплея не поддерживает улучшенный интерфейс пользователя, то AutoCAD проигнорирует этот бит функции INITGET.

INITGET Контрольные биты INITGET воспринимаются
Не пустой Не 0 Не отрицат. Нет пределов 3-х мерные
точки
Использовать
пунктир
GETINT X X X
GETREAL X X X
GETDIST X X X X
GETANGL X X X
GETORIENT X X
GETPOINT X X X X
GETCORNER X X X X
GETKWORD X
GETSTRING
GETVAR

Факультативный аргумент INITGET-функции <строка> определяет список ключевых слов, которые будут проверяться в последующем запросе GETxxx, если пользователь произвел ввод неправильного типа (например, точку для GETPOINT). Если ввод пользователя соответствует одному из ключевых слов из этого списка, это ключевое слово возвращается GETxxx функцией как результат типа STRING (строковая константа). Программа пользователя может тестировать ключевые слова и выполнять желаемые действия для каждого из них. Если ввод пользователя недозволенного типа и не соответствует ни одному из ключевых слов, AutoCAD предложит пользователю повторить ввод.

Список ключевых слов может быть такой формы :"Key1 KEy2 KEY3,ABBREV3". Отдельные ключевые слова отделяются пробелами. Сокращение необязательно и возможны два способа специфицирования. Необходимая для ввода часть ключевого слова может быть выделена заглавными буквами, остальная часть строчными или необходимая часть может быть повторена через запятую после ключевого слова. Второй способ применяется в случае использования иностранного языка, где переход из прописных в заглавные буквы сложен или невозможен. В обоих случаях длина необходимой части - минимальная длина, которая должна быть для точного различения. (Для метода с разделением запятой подразумевается, что сокращение - это начало ключевого слова.)

Например
      "LTYPE,LT"  и
      "LType"

эквивалентные спецификации. Будет восприниматься любой ввод пользователя из "LTYPE", "LTYP", "LTY" или "LT", но "L" недостаточно, не подходят и "LTSCALE" "LTYPEX".

Рассмотрим следующую функцию, определенную пользователем:
      (defun getnum (/ x)
            (initget 1 "Pi Two-pi")
            (setq x (getreal "pi/Two-pi/<число>:"))
            (cond ((eq x "Pi")      pi)
                  ((eq x "Two-pi:") (* 2.0 pi))
                  (T x)
            )
      )
Здесь INITGET препятствует пустому вводу и устанавливает список из двух ключевых слов "Pi" и "Two-pi". Затем используется GETREAL для извлечения вещественного числа с помощью подсказки "Pi/Two-pi/<число>:" и результат помещается в локальный символ Х. Если пользователь вводит число, это число возвращается функцией GETNUM. Однако, если пользователь вводит ключевое слово "Pi" (или просто "P"), GETPOINT возвращает ключевое слово "Pi". Функция COND фиксирует это и в этом случае возвращает значение pi. Ключевое слово "Two-pi" трактуется аналогично. Список управляющих сигналов и ключевых слов, устанавливаемые INITGET, применимы только к следующему за INITGET вызываемому GETxxx и затем автоматически сбрасываются. Это позволяет Getxxx-функций избежать необходимости при следующем вызове очищать специальные состояния.

4.61. (insers <точка1> <точка2> <точка3> <точка4> [<onseg>])

Функция INTERS проверяет два отрезка на пересечение и возвращает точку пересечения или nil, если они не пересекаются. <Точка1> и <точка2> крайние точки первого отрезка, <точка3> <точка4> - крайние точки второго отрезка. Если факультативный аргумент <onseg> присутствует и является nil, то отрезки будут восприниматься бесконечной длины и INTERS будет возвращать точку пересечения даже, если она находится за крайними точками одного или обоих отрезков. Если же аргумент <onseg> отсутствует или не является nil, то точка пересечения должна находится на обоих отрезках или INTERS вернет nil.

Например, дано:
      (setq a '(1.0 1.0) b '(9.0 9.0))
      (setq c '(4.0 1.0) c '(4.0 2.0))
тогда:
      (inters a b c d)        возвращает  nil
      (inters a b c d T)      возвращает  nil
      (inters a b c d nil)    возвращает  (4.000000 4.000000)

4.62. (itoa <целое>)

Эта функция возвращает преобразование целого числа в строковую константу.

Например:
      (itoa 33)               возвращает  "33"
      (itoa -17)              возвращает  "-17"

4.63. (lambda <аргументы> <выражение> ...)

Эта функция определяет "анонимную" функцию. Она обычно используется, когда при определении новая функции не именуется. Это так же делает замысел программиста более очевидным, за счет того, что функция находится там же, где она используется. LAMBDA возвращает значение последнего <выражения> и часто используется в связи с APPLY и/или MAPCAR для выполнения функции над списком.

Например:
      (apply '(lambda (x y z)
                  (* x (-y z))
              )
            '(5 20 14)
      )                                         возвращает  30
и:
      (mapcar '(lambda (x)
      (setq counter (1+ counter))
                        (* x 5)
                  )
            '(24 -6 10.2)
      )                                   возвращает (10 20 -30 51.000000)

4.64. (last <список>)

Эта функция возвращает последний элемент списка. <Список> не должен быть равен nil.

Например:
      (last '(a b c d e))           возвращает  E
      (last '(a b c (d e)))         возвращает  (D E)
Как видно, LAST возвращает либо атом, либо список. На первый взгляд LAST может являться хорошим путем для извлечения координаты Y точки. Хотя это так для 2-х мерных точек (список из 2-х действительных чисел). LAST будет возвращать координату Z в случае 3-х мерной точки. Чтобы ваши функции работали как следует при задании и 2-х мерных и 3-х мерных точек, мы рекомендуем вам использовать CADR для извлечения координаты Y и CADDR для извлечения координаты Z.

4.65. (length <список>)

Эта функция возвращает целое число, означающее число элементов в <списке>.

Например:
      (length '(a b c d))           возвращает  4
      (length '(a b (c d)))         возвращает  3
      (length '())                  возвращает  0

4.66. (list <выражение> ...)

Эта функция берет любое число выражений (<выражение>) и организует из них строку, возвращая список.

Например:
      (list 'a 'b 'c)               возвращает  (A B C)
      (list 'a '(b c) 'd)           возвращает  (A (B C) D)
      (list 3.9 6.7)                возвращает  (3.90000 6.70000)
В AutoLISP эти функции часто используются для определения значений 2-х и 3-х мерных точек (список из 2-х или 3-х действительных чисел).

4.67. (listp <элемент>)

Эта функция возвращает T, если <элемент> список, иначе nil.

Например:
      (listp '(a b c))              возвращает  T
      (listp 'a)                    возвращает  nil
      (listp 4.343)                 возвращает  nil

4.68. (load <имя файла>)

Эта функция загружает файл выражений AutoLISPа и выполняет эти выражения. <Имя файла> - это строковая константа, которая представляет собой имя файла без расширения (подразумевается расширение ".lsp"). <Имя файла> может включать префикс директории, например "/function/test1". На системах MS-DOS/PS-DOS допускается так же использовать букву устройства ввода/вывода и вы можете пользоваться обратной косой чертой вместо прямой косой черты (но помните, чтобы ввести в строку одну обратную черту вы должны использовать "\\").

Если операция успешно завершена, LOAD возвращает имя последней функции, определенной в файле. Если операция не выполнена, LOAD возвращает имя файла в виде строкового выражения.

Например, предположим, что файл "/fred/test1.lsp" содержит DEFUN, определяющую функцию MY-FUNC, и что файл "test2.lsp" не существует:

      (load "/fred/test1")          возвращает  MY-FUNC
      (load "test2")                возвращает  "test2"
Функция LOAD не может вызываться из другой функции LISP. Она должна вызываться непосредственно с клавиатуры (или из меню или скрипт-файла), в то время как ни одна другая функция LISP не находится в процессе выполнения.

Каждый раз, когда Редактор Чертежей AutoCAD начинает очередной сеанс, AutoLISP загружает файл "acad.lsp", если он существует. Вы можете поместить определения функций и часто используемые команды в этот файл и они будут исполняться автоматически, когда вы будете редактировать чертежи.

4.69. (log <число>)

Эта функция возвращает натуральный логарифм <числа> как действительное число.

Например:
      (log 4.5)                     возвращает  1.504077
      (log 1.22)                    возвращает  0.198850

4.70. (logand <число> <число> ...)

Эта функция возвращает результат действия побитового И над списком <чисел>. Эти <числа> должны быть целые и результат - так же целое число.

Например:
      (logand 7 15 3)               возвращает  3
      (logand 2 3 15)               возвращает  2
      (logand 8 3 4)                возвращает  0

4.71. (logior <число> <число> ...)

Эта функция возвращает результат действия побитового ИЛИ над списком <чисел>. <Числа> должны быть целые и результат так же целое число.

Например:
      (logior 1 2 4)                возвращает  7
      (logior 9 3)                  возвращает  11

4.72. (lsh <число1> <число бит>)

Эта функция возвращает побитовый сдвиг <числа1> на <число бит>. <Число1> и <число бит> должны быть целыми и результат - тоже целое. Если <число бит> положительно, то <число1> сдвигается влево; если отрицательно - то вправо. В каждом случае "нулевые" биты добавляются, а сдвигаемые биты сбрасываются. Если "единичный" бит сдвигается в высший (16-й) разряд целого числа, знак числа меняется.

Например:
      (lsh 2 1)                     возвращает  4
      (lsh 2 -1)                    возвращает  1
      (lsh 40 2)                    возвращает  160
      (lsh 16384 1)                 возвращает  -32768

4.73. (mapcar <функция> <список1>...<списокn>)

Эта функция возвращает результат выполнения <функции> над отдельными элементами от <списка1> до <списка n> вводимыми как аргументы в <функцию>. Число <списков> должно соответствовать числу аргументов, требующихся для <функции>.

Hапример:
      (mapcar '1+ '(10 20 30))      возвращает  (11 21 31)
это эквивалентно:
      (1+ 10)
      (1+ 20)
      (1+ 30)
Kроме того, что MAPCAR возвращает список результатов. Так же:
      (mapcar '+ '(10 20 30) '(4 3 2))    возвращает (14 23 32)
это то же самое, что и:
      (+ 10 4)
      (+ 20 3)
      (+ 30 2)

Функция LAMBDA может задавать "анонимную" функцию для выполнения функцией MAPCAR. Это полезно когда некоторые из аргументов функции константы или передаются каким-либо иным образом.

Hапример:
      (mapcar '(lambda (x) (+ x 3)) '(10 20 30))      возвращает  (13 23 33)
и:
      (mapcar '(lambda (x y z)
                  (* x (- y z))
            )
            '(5 6) '(20 30) '(14 5.0)
      )   
возвращает (30 150.000000)

4.74. (max <число> <число>...)

Эта функция возвращает наибольшее из заданных <чисел>. Kаждое <число> может быть действительным или целым.

Hапример:
      (max 4.07 -144)               возвращает  4.070000
      (max -88 19 5 2)              возвращает  19

4.75. (member <выражение> <список>)

Эта функция просматривает <список> - встречается ли <выражение> и возвращает часть <списка>, начинающуюся с первого найденного <выражения>. Если в <списке> нет <выражения>, MEMBER возвращает nil.

Hапример:
      (member 'c '(a b c d e))      возвращает  (C D E)
      (member 'q '(a b c d e))      возвращает  nil



Copyright © Сайт поддержки пользователей САПР