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

Занятие 6.

Функция APPEND –склеивает воедино списки.

Пример:

(APPEND ‘(A) NIL ‘((B)(C)))-> ( A (B) (C) ) (LIST ‘(A) NIL ‘((B)(C)))-> ((A) NIL ((B) (C)))

Позволяет в качестве аргументов использовать и атомы ( не только списки ).

(LISTA NIL )->( A NIL) в этом случае создает список из этих атомов.

(NUMBERP 12)->T для чисел возвращает Т, для другого – ложь.

Функция LENGTH – возвращает длину списка

(LENGTH ‘((A B) D (E))) -> 3

Число братьев первого уровня в S-выражении

Функция REVERSE- функция обращает список – переписывает элементы в обратном порядке (REVERSE ‘(A (BC)D))-> ( D (BC) A)

Функция SUBST – когда вместо части списка можно подставить другие элементы. (SUBSTAB ‘( 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 (MAPCARADD1 (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))) ) ) )

Команда (LOADprog.lsp) затем будет Т

<И тут пишем>

Программа для обращения списка (DEFUN OBR (K) (CON0D ( (NULL K) 0);граничное условие, длина списка равна 0 (T(APPEND(OBR(CDR(K)))(LIST(CAR K)))) ) )