
- •1. Основные принципы работы в системе muLisp
- •3. Сообщения о прерывании работы интерпретатора
- •4. Сообщения об ошибках
- •5. Редактирование текстов программ и загрузка исходных
- •Insert - переключение режимов редактирования
- •6. Организация ввода-вывода
- •7. Отладка программ
- •8.4 Функции сравнения
- •8.5 Логические функции
- •8.6 Функции присваивания
- •8.7 Примитивы определения функций
- •8.8 Арифметические функции
- •8.9 Функционалы
- •8.10 Функции ввода
- •8.12 Функции работы со строками 2.
- •8.13 Работа со стеком 2.
- •8.14 Функции свойств
- •8.15 Контрольные конструкции
8.8 Арифметические функции
(MAX N1...Nn)
Возвращает максимальное из чисел N1...Nn
(MAX 5 -7 4) --> 5
(MIN N1...Nn)
Возвращает минимальное из чисел N1...Nn
(MIN 5 -7 4) --> -7
(+ N1...Nn)
Возвращает сумму чисел N1+N2+...+Nn
(+ 2 3 4 -5) --> 4
(- N1...Nn)
Возвращает разность N1-(N2+N3+...+Nn)
(- 12 5 -3) --> 10
(* N1...Nn)
Возвращает произведение чисел: N1*N2*...*Nn
(* 3 4 5) --> 60
(/ N1...Nn)
Возвращает результат от деления N1/(N2*N3*...*Nn)
(/ 12 5 -3) --> 0.8
(ADD1 N)
Возвращает N, увеличенное на 1: N:=N + 1
(ADD1 3) --> 4
- 26 -
(SUB1 N)
Возвращает N, уменьшенное на 1: N:=N - 1
(SUB1 3) --> 2
(ABS N)
Возвращает абсолютное значение N
(ABS -3) --> 3
(ABS 3) --> 3
(SIGNUM N)
Возвращает знак числа: при N>0 - 0 при N<0 - 1
(SIGNUM -0.2) --> 1
(SIGNUM 5) --> 0
8.9 Функционалы
Функции, которые рассматриваются в данном разделе, в
качестве своих аргументов используют другие функции, а также
один или более списков, из которых формируются списки их
параметров.
(MAPC function list1 ...listN)
MAPC - вычисляет функцию function c аргументами, являющи-
мися car-элементами списков list1...listN, затем - с ар-
гументами, являющимися cadr-элементами, затем - с
caddr-аргументами и т.д. до тех пор, пока каждый список
не будет исчерпан. В качестве значения МАРС возвращает
list1.
$(MAPC 'SETQ '(A B C) '(DOG CAT COW)) -->
(A B C) ; значение функции MAPC
$A -->DOG
$B -->CAT
$C -->COW
(MAPL function list1 list2 ... listN)
MAPL - вычисляет функцию function c аргументами list1,...
- 27 -
listN, затем - с аргументами, являющимися cdr-элементами
этих списков затем - с сddr-аргументами и т.д. до тех
пор, пока каждый список не будет исчерпан. В качестве
значения МАРС возвращает list1.
$(MAPL '(LAMBDA (X Y)(PRINT (APPEND X Y))) '(A B) '(1 2))
(A B 1 2) ; первое применение функции
(B 2) ; второе применение функции
(A B) ; значение функции MAPL
(MAPCAR function list1 list2 ... listN)
MAPCAR - вычисляет функцию function c аргументами, являю-
щимися car-элементами списков list1...listN,затем - с ар-
гументами, являющимися cadr-элементами, затем - с
caddr-аргументами и т.д. до тех пор, пока каждый список
не будет исчерпан. В качестве значения MAPCAR возвращает
список результатов. Этим она отличается от функции MAPC.
(MAPCAR '* '(2 3 5 7) '(2 4 6 8)) --> (4 12 30 56)
(MAPLIST function list1 list2 ... listN)
MAPLIST - вычисляет функцию function c аргументами list1,
...listN, затем - с аргументами, являющимися cdr-элемен-
тами этих списков затем - с сddr-аргументами и т.д.до тех
пор, пока каждый список не будет исчерпан. В качестве
значения МАРСAR возвращает список результатов.
(MAPLIST 'REVERSE '(A B C D)) -->
((D C B A) (D C B) (D C) (D))
(APPLY function arglist)
Если function есть имя встроенной или определенной с по-
мощью оператора DEFUN функции, APPLY осуществляет вычис-
ление выражения (function arg1 arg2 ... argN), где arg1,
arg2, ... argN - элементы списка arglist. В противном
случае - APPLY генерирует прерывание по ошибке "Неопреде-
ленная функция".
- 28 -
(APPLY 'CONS '(A (B C D))) --> (A B C D)
(APPLY '(LAMBDA (N) (* N N)) '(5)) --> 25
(FUNCALL function arg1 arg2 ... argN)
Если function есть имя встроенной или определенной с по-
мощью оператора DEFUN функции, FUNCALL осуществляет вы-
числение выражения (function arg1 arg2 ... argN). В
противном случае - FUNCALL генерирует прерывание по ошиб-
ке "Неопределенная функция".
(FUNCALL 'CONS 'A '(B C D)) --> (A B C D)
(FUNCALL '(LAMBDA (N) (* N N)) 5) --> 25
(EVAL object)
EVAL вычисляет значение аргумента object.
Если object - атом, то (EVAL object) выдает значение ато-
ма с учетом всех косвенных ссылок.
Если object -список, первый элемент которого имя функции,
то (EVAL object) выдает значение (APPLY (CAR object)(CDR
object) ). В противном случае в качестве значения функции
EVAL выдается значение этого списка.
$(SETQ TOM 'MAN)
$(SETQ MAN 'ANIMAL)
$TOM --> MAN
$(EVAL 'TOM) --> ANIMAL
$(EVAL '(CONS 'A '(B C D))) --> (A B C D)
$(EVAL '(A B C) ) --> (A B C)