Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
печать2.doc
Скачиваний:
4
Добавлен:
21.09.2019
Размер:
338.94 Кб
Скачать

Функции высших порядков

(MAPCAR ‘<функция> <выражение>) – применяется 1 аргумент ко всем элементам второго.

(MAPCAR ‘ADD1 ‘(4 8 3))  (5 9 4)

Требование: функция должна быть одного аргумента (унарной).

(APPLY ‘<функция> <выражение>) – применяется указанная функция к указанному выражению.

(SETQ A ‘(4 5 8 1))

(APPLY ‘+ A)  18

(PUTPROP ‘ВАСЯ ‘МАША ПЕТЯ) ‘ДЕТИ) (PUTPROP – 3 аргумента)

(GET ‘ВАСЯ ‘ДЕТИ)  (МАША ПЕТЯ) (GET – 2 аргумента (1 – объект, 2 – его свойство)).

Для создания новых функций: DEFUN

(DEFUN <атом> (<p1> <p2>….<pₓ>) <выражение>)

имя аргументы тело функции

созданной функции

F (x y z)

Функция подсчета количества элементов в списке:

(DEFUN LONG(L)

(COND

(NULL L) 0)

(T (ADD1 (LONG(CDR L))))

)

)

Программа (элементы в обратном порядке):

;Петросова Анастасия Обращение списка

(DEFUN REV(A)

(COND

((NULL A) NIL)

(T (APPEND(REV(CDR A))(LIST(CAR A))))

)

)

Программа (проверка принадлежности элементов множеству):

(DEFUN PROV(A X)

(COND

((NULL X) NIL)

((EQUAL A(CAR X)) T)

(T (PROV A (CDR X)))

)

)

Программа (объединение множеств, представленных списками):

(DEFUN UNION(E F)

(COND

((NULL E) F)

((PROV(CAR E) F)(UNION(CDR E) F))

(T (UNION(CDR E)(CONS(CAR E) F)))

)

)

Программы на Лиспе

I.

;программа решения задачи (последовательность)

(DEFUN ADD1(X) (+1 X))

(DEFUN PIMP(U)

(PRINT(U)

(COND

((EQUAL U 1) NIL)

((ZEROP(REM U 2)) PIMP(/ U 2)))

(T (PIMP (ADD1(* U 3))))

)

)

Отладка:

PIMP(17)

17 52 26 13 40 20 10 5 16 8 4 21

Стеки вызовов

PIMP17 PRINT PIMP17 COND EQUAL COND ZEROP REM ZEROP COND

PIMP17 PIMP17 COND PIMP17 COND ZEROP COND PIMP17

PIMP17 PIMP17 COND PIMP17

PIMP17

PIMP17 ADD1 *U PIMP52

COND PIMP17 ADD1 COND

PIMP17 COND PIMP17 PIMP17

PIMP17 COND

PIMP17

II.

;Перевод балла в оценку

(DEFUN BAL(A)

(COND

((EQUAL A 5) ‘OTLICHNO)

((EQUAL A 4) ‘HOROSHO)

((EQUAL A 3) ‘(UDOVLETVORITELNO)

((EQUAL A 2) ‘(NEUDOVLETVORITELNO)

(T ‘NE_IZVESTNO)

)

)

III.

;сумма квадратов элементов

(DEFUN SKV(A)

(DEFUN SQR(X) (* X X))

(APPLY ‘+(MAPCAR ‘SQR A))

)

IV.

;сумма нечетных элементов 1 вариант.

(DEFUN SUMNECH(A)

(COND

((NULL A) 0)

((ZEROP(REM(CAR A) 2))(SUMNECH(CDR A)))

(T (+(CAR A)(SUMNECH(CDR A))))

)

)

V.

;сумма нечетных элементов 2 вариант.

(DEFUN SUMNECH2(A)

(DEFUN NECHET(X)

(* (REM X 2) X))

(APPLY ‘+ (MAPCAR ‘NECHET A))

)

Сортировка:

;функция сортировки перестановкой

(DEFUN SORTS(X)

(COND

(NULL(CDR X)) X)

(T (CONS(MINS X)(SORTS(REM V(MINS X) X))))

)

)

;поиск минимального элемента в списке

(DEFUN MINS(X)

(COND

((NULL(CDR X)) CAR X))

((<(CAR X)(MINS (CDR X)))(CAR X))

(T (MINS(CDR X)))

)

)

;удаление вхождения 1 элемента из списка

(DEFUN REMV(EL S)

(COND

((NULL S) NIL)

(EQ EL(CAR S))(CDR S))

(T (CONS(CAR S)(REMV EL(CDR S))))

)

)

;функция сортировки вставками

(DEFUN SORTV(X)

(COND

((NULL X) X)

(T INS(CAR X)(SORTV(CDR X))))

)

)

;INS – вставка элемента на место

(DEFUN INS(X S)

(COND

((NULL S) (LIST X)) (LIST X) – сконструировать список из 1 элемента

((<= X (CAR S))(CONS X S))

(T (CONS(CAR S) (INS X(CDR S))))

)

)