- •Оглавление
- •Эзотерические языки программирования. Занятие 1
- •Язык Ассемблер. Занятие 2.
- •Интеграция ассемблера в си. Занятие 3.
- •Занятие 4
- •Функциональное программирование
- •Язык программирования лисп
- •Занятие 6.
- •Занятие 7.
- •Занятие 8.
- •Логическое программирование Занятие 9.
- •Язык программирования пролог. Занятие 10.
- •Visual Prolog
- •Ic- Prolog swi- Prolog
- •Iso Prolog
- •Визуальные языки программирования. Занятие 10.
Занятие 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 является очень хорошим примером параллельного вычисления.
Лисп – язык с нестрогой динамической типизацией.
Существует ли язык, который еще выше по уровню абстракции? Да.