Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект по ЯП_Гайденрайх.doc
Скачиваний:
23
Добавлен:
16.03.2015
Размер:
533.5 Кб
Скачать

Занятие 7.

Продолжаем функциональное программирование

Программа перевода оценок из баллов в строку: ( DEFUN OCEN1 (B) ( COND (( = B 2 ) ‘НЕУД) (( = B 3 ) ‘УДОВЛ) (( = B 4 ) ‘ХОР) (( = B 5 ) ‘ОТЛ) (T ‘НЕТ ТАКОЙ ОЦЕНКИ) ) )

Обратный перевод: ( DEFUN OCEN2 (S) ( COND (( = S ‘НЕУД ) 2) (( = S ‘УДОВЛ ) 3) (( = S ‘ХОР ) 4) (( = S ‘ОТЛ ) 5) (T ‘НЕТ ТАКОЙ ОЦЕНКИ) ) )

Программа PIMP

Вывод последовательности чисел на экран – Un+1={Un/2, if Un-четное else 3*Un+1, Stop if Un=1} Un=5 Un+1=16 Un+2=8 Un+3=4 Un+4=2 Un+5=1 (DEFUN (PIMP (U) (PRINT U) ( COND ((EQUAL U 1) NIL) ((ZEROP (REM U 2) (PIMP (/ U 2))) (T (PIMP ( ADD1(* U 3)))) ) )

Программа слияния множеств

Постановка задачи

(A B C D E) (Z U B D Y) (A B C D E Z U Y)

Придется написать функцию, которая будет проверять вхождение атома в множество.

(DEFUN SOED (E F)

;Программа будет рекурсивной, значит потребуется условие остановки рекурсии

(COND ((NULL E) F) ((APP (CAR E)F) (SOED (CDR E) F) (T (SOED (CDR E) (CONS (CAR E) F))) ) ) {ВСПОМОГАТЕЛЬНАЯ ФУНКЦИЯ APP ПРОВЕРЯЕТ ВХОЖДЕНИЕ В МНОЖЕСТВО} (DEFUN APP(A X) (COND (( NULL X) NIL) ((EQUAL (CAR X) A)T) (T APP A (CDR X) ) ) )

ПРОГРАММА СУММЫ НЕЧЕТНЫХ:

(DEFUN SUMNECH(A) (COND ( (NULL A) 0) ( (CHET (CAR A)) SUMNECH(CDR A)) (T (+CAR A) SUMNECH (CDR A) ) ) ) ;ВСПОМОГАТЕЛЬНАЯ ФУНКЦИЯ ОПРЕДЕЛЯЮЩАЯ ЧЕТНОСТЬ ЧИСЛА (DEFUN CHET(X) (ZEROP (REM(X/2))) )

Занятие 8.

Программа сортировки на Lisp (программа сортировки списка 1, вспомогательная функция нахождения минимального элемента списка)

(DEFUN MINS (S) (COND ((NULL (CDR S)) S) (CAR S)); проверяем, что хвост пуст и в списке 1 элемент ((<(CAR S)(MINS(CDR S))) (CAR S)) (T (MINS(CDR S))) ) ) (DEFUN SORT (A (COND ((NULL(CDR A)) (A));если список из 1 элемента, то это граничное условие (T(CONS (MINS A) (SORT(ISKL(CDR A) (MINS A)))) ) )

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

(DEFUN ISKL(S E) (COND ((NULL S) S) (( EQ E ( CAR S ))(CDR S)) (T(CONS(CAR S)(ISKL( S) E))) ) )

программа сортировки списка , вспомогательная функция вставки элемента в нужное место

(DEFUN VSTN ( S E ) (COND ( (NULL S) (LIST E) ((<E (CAR S)) (CONS E S)) (T(CONS(CAR S) (VSTN (CDR S) E))) ) )

основная программа

(DEFUN SORT2(A) (COND ((NULL A)A) (T(VSTN (SORT2(CDR A)) (CAR A))) ) )

Сферы использования языка ЛИСП включают такие как искусственный интеллект ( в том числе так называемые экспертные системы). Например системы: MYCIN, DENDRAL. Признаны заменить людей экспертов в каких либо трудных областях знаний.

Уровень абстракции языка Lisp он выше, чем у традиционных императивных языков. И на нем удобнее соответственно описывать задачи, требующие более высокого уровня абстракции.

В функциональных языках часто применяется так называемая «ленивая модель вычисления», когда функция выполняется только в тот момент, когда ее результат потребовался.

Лисп обладает потенциалом распараллеливания-операции могут выполняться параллельно.

Несмотря на то что язык ЛИСП был создан давно, он до сих пор развивается. Его потомок Erlang является очень хорошим примером параллельного вычисления.

Лисп – язык с нестрогой динамической типизацией.

Существует ли язык, который еще выше по уровню абстракции? Да.