
- •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.4 Функции сравнения
(EQUAL S1 S2)
Результат T, если S1 равно S2, иначе NIL
(EQUAL 'A 'A) --> T
(EQUAL '(A B C) '(A B C)) --> T
(EQUAL '(A B C '(C B A) ) NIL
(MEMBER S L)
Если S является элементом списка L, тогда значением функ-
ции будет часть списка L, начиная с первого вхождения S,
иначе NIL
(MEMDER 'A '(B C D)) --> NIL
(MEMBER 'A '(B A D)) --> (A D)
- 22 -
(= N1...Nn)
Результат Т, если N1=N2=N3...=Nn, иначе NIL
(= 5 9) --> NIL
(= 3 3.0) --> T
(/= N1...Nn)
Результат T, если N1 не= N2 и N2 не= N3 и т.д., иначе NIL
(/= 5 9) --> T
(/= 4 4 -7) --> NIL
(/= 3 3.0) --> NIL
(/= 6 2 6) --> T
(< N1...Nn)
Результат Т, если N1<N2 и N2<N3 и т .д., иначе NIL
(< 5 9) --> T
(< 4 -7) --> NIL
(< 3 3.0) --> NIL
(> N1...Nn)
Результат T, если N1>N2 иN2>N3 и т.д., иначе NIL
(> 5 9) --> NIL
(> 4 -7) --> T
(> 3 3.0) --> NIL
(<= N1...Nn)
Результаты T, если N1<=N2 и N2<=N3 и т.д., иначе NIL
(<= 5 9) --> T
(<= 4 -7) --> NIL
(<= 3 3.0) --> T
(>= N1...Nn)
Результат T, если N1>=N2 и N2>=N3 и т.д., иначе NIL
(>= 5 9) --> NIL
(>= 4 -7) --> T
(>= 3 3.0) --> T
8.5 Логические функции
- 23 -
(NOT S) - логическое отрицание.
NOT - возвращает Т, если S имеет значение NIL иначе NIL
(NOT NIL) --> T
(NOT 'FOO) --> NIL
(NOT (EQUAL 'DOG 'CAT)) --> T
(AND S1...S2) - конъюнкция.
AND слева направо вычисляет значения S1...Sn и возвращает
значение T, если все аргументы неNIL, иначе вычисление
проводится до первого NIL и возвращается NIL
(AND (EQ 'DOG 'CAT) (< 2 3)) --> NIL
(AND (EQ 'DOG 'DOG) (< 2 3)) --> T
(OR S1...S2) - дизъюнкция.
Вычисляются аргументы S1...Sn слева направо, пока не бу-
дет получен результат, отличный от NIL, он и будет ре-
зультатом работы OR.Если все результаты NIL, тогда функ-
ция OR возвращает NIL
(OR (EQ 'DOG 'CAT) (< 2 3)) --> T
(OR (EQ 'DOG 'CAT) (< 3 2)) --> NIL
8.6 Функции присваивания
(SET A S )
Значению А присваивается значение S.Значение А атом.SET
возвращает значение второго аргумента
(SET 'PET 'DOG) --> DOG
(SET PET 'ANIMAL) --> ANIMAL
DOG --> ANIMAL
PET --> DOG
(SETQ A1 S1 .. An Sn)
Аргументы A1...An квотируются и им присваиваются значения
аргументов S1...Sn (соответственно) . SETQ возвращает пос-
леднее присвоенное значение
(SETQ FOO '(D E F)) --> (D E F)
- 24 -
FOO --> (D E F)
(SETQ SUM 5) --> 5
(SETQ SUM (+ 3 4) SQR (* SUM SUM)) --> 49
SUM --> 7
SQR --> 49
8.7 Примитивы определения функций
(GETD А)
А-имя функции. Выдает в качестве своего значения определение
функции А (лямбда-выражение).
(GETD FACTORIAL) -->
(LAMBDA (N)(COND((ZEROP N) 1)(T (* (FACTORIAL (SUB1N))))))
(MOVD A1 A2)
Функции с именем А1 присваивается еще одно имя - А2.
Значение функции - новое имя.
(MOVD 'CAR 'FIRST) --> FIRST
(FIRST '(A B C D E)) --> A
(REMD A)
А-имя функции. Из оперативной памяти убирается пользова-
тельская функция с именем А.Значение функции - имя убира-
емой функции
(DEFUN FACTORIAL (N)
(COND ((ZEROP N) 0)
(T (FACTORIAL (SUB1 N) ) ) )
) --> FACTORIAL
(GETD FACTORIAL) -->
(LAMBDA (N)(COND ((ZEROP N) 1)(T (* (FACTORIAL (SUB1N))))))
(REMD 'FACTORIAL) --> FACTORIAL
(GETD 'FACTORIAL) --> NIL
(DEFUN A L F1 ... FN)
A-имя функции. Позволяет определить функцию пользователя
А. L -список параметров. F1...FN - операторы тела функции.
Значение функции DEFUN - имя созданной функции.
- 25 -
(DEFUN FACTORIAL (N)
(COND ((ZEROP N) 0)
(T (FACTORIAL (SUB1 N) ) )
)
) --> FACTORIAL