Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по языку ЛИСП.doc
Скачиваний:
111
Добавлен:
28.06.2014
Размер:
210.94 Кб
Скачать

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)