- •Оглавление
- •Эзотерические языки программирования. Занятие 1
- •Язык Ассемблер. Занятие 2.
- •Интеграция ассемблера в си. Занятие 3.
- •Занятие 4
- •Функциональное программирование
- •Язык программирования лисп
- •Занятие 6.
- •Занятие 7.
- •Занятие 8.
- •Логическое программирование Занятие 9.
- •Язык программирования пролог. Занятие 10.
- •Visual Prolog
- •Ic- Prolog swi- Prolog
- •Iso Prolog
- •Визуальные языки программирования. Занятие 10.
Занятие 6.
Функция APPEND –склеивает воедино списки.
Пример:
(APPEND ‘(A) NIL ‘((B)(C)))-> ( A (B) (C) ) (LIST ‘(A) NIL ‘((B)(C)))-> ((A) NIL ((B) (C)))
Позволяет в качестве аргументов использовать и атомы ( не только списки ).
(LIST ‘A NIL )->( A NIL) в этом случае создает список из этих атомов.
(NUMBERP 12)->T для чисел возвращает Т, для другого – ложь.
Функция LENGTH – возвращает длину списка
(LENGTH ‘((A B) D (E))) -> 3
Число братьев первого уровня в S-выражении
Функция REVERSE- функция обращает список – переписывает элементы в обратном порядке (REVERSE ‘(A (BC)D))-> ( D (BC) A)
Функция SUBST – когда вместо части списка можно подставить другие элементы. (SUBST ‘A ‘B ‘( A B C))-> ( B B C )
В Функции должно быть 3 аргумента из которых второй должен быть атомов. В результате выполнения функции третий аргумент в нем все аргументы равные первому элементу заменяются на аргументы второго элемента.
Функция MEMBER
1-атом, второе список. Возвращает Т если первый аргумент является членом второго и NIL возвращает только если первым аргумент не является братом первого уровня во втором. ( SETQ M ‘(A B ( C D) E) ) (MEMBER ‘F M)-> NIL (MEMBER ‘C M)->NIL (MEMBER ‘B M)->( B (CD) E)
Функция RPLACA – замещает голову списка на второй аргумент (первый аргумент список, а второе – то что вставится вместо головы). (SETQ G ‘(ABC)) (RPLACA (CDR G) 'D)-> (D C)
Изменится при подобном изменении и сам исходный список G – станет A D C.
RPLACD – второй элемент заменяет хвост первого аргумента.
В языке ЛИСП во многих реализациях допускается буквенное обозначение :
-difference
+plus *times /quottent SORT 16 ->4 EXPT 2 3 ->8 <-LESSP >-GREATERP Остаток от деления – REM (REM 14 3) ->2
В ЛИСПЕ интересным является тот факт что программа и данное и то и другое списки. В качестве аргументов функция могут быть сами функции. За счет единообразного представления данных и программ.
Примеры функций высших порядков, получаемых путем применения функция к другим функциям.
Функция MAPCAR – 2 аргумента. Первый – функция, известная системе, причем унарная (имеющая один аргумент), второй аргумент – выражение. Результатом является список, в котором первая функция применена ко всем аргументам второго. (ADD1 10)->11 (MAPCAR ‘ADD1 (483))->(5 9 4)
Позволяет создавать мощные программы, гибко обрабатывающие данные.
Функция APPLY – первый аргумент – функция, второй – выражение. Функция применяется сразу ко всему выражению ( уже не унарная функция ). (APPLY ‘+ ‘(4 5 8 1))->19
Лямбда-функция – в ЛИСПе позволяет создавать безымянную функцию для локального использования. (( LAMBDA (X) (EUQAL X ‘перо)) ‘ПЕРО)-> T
(Программа оценки из баллов в строку и наоборот). (MAPCAR ‘(LAMBDA (I) (* I I I)) ‘(1 2 3 4))->(1 8 27 64)
Как писать программы на языке ЛИСП- определение новых функций: (DEFUN <atom> (<p1><p2>…<pn>) <S-выр>)
<atom> - имя вновь создаваемой функции
<p1><p2>…<pn> – аргументы
<S-выр> - тело
Пример: функция прибавления единички: (DEFUN (ADD1 (X) (+ 1 X) )
Программа подсчитывания длины списка: (DEFUN LEN (S) (COND ((NULL S) 0) ; граничное условие, длина списка равна 0 ( T(ADD1 (LEN(CDR(S))) ) ) )
Команда (LOAD ‘prog.lsp) затем будет Т
<И тут пишем>
Программа для обращения списка (DEFUN OBR (K) (CON0D ( (NULL K) 0);граничное условие, длина списка равна 0 (T(APPEND(OBR(CDR(K)))(LIST(CAR K)))) ) )