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

7. Примитивы определения функций

Функция

Значение функции, примеры

1.

GETD [А]

А -имя функции

Выводит на экран определение функции с именем А. Значение функции- соответствующее лямбда выражение

$ (GETD FACTORIAL)

(LAMBDA (N) (COND ((ZEROP N) 1)

(T (* (FACTORIAL (SUB1 N))))))

2.

MOVD [A1 A2]

A1 -старое имя функии

А2 -новое имя функции

Функции с именем А1 присваивается еще одно имя - А2.Значение функции - новое имя

$ (MOVD 'CAR 'FIRST)

FIRST

$ (FIRST '(A B C D E))

A

3.

REMD [A]

А -имя функции

Из оперативной памяти убирается

пользовательская функция с именем А. Значение функции – имя убираемой функции

(DEFUN FACTORIAL (N)

(COND ((ZEROP N) 0)

(T (FACTOPIAL (SUB1 N))) ) )

FACTORIAL

$ (GETD FACTORIAL)

(LAMBDA (N) (COND ((ZEROP N) 1)

(T (* (FACTORIAL (SUB1 N))))))

$ (REMD 'FACTORIAL)

FACTORIAL

$ (GETD FACTORIAL)

NIL

4.

DEFUN [A L F1...FN]

A -имя функции

Позволяет определить функцию пользователя. Значение функции – имя созданной функции

$ (DEFUN FACTORIAL (N)

(COND ((ZEROP N) 0)

(T (FACTORIAL (SUB1 N)))) )

FACTORIAL

DEFUN[A(ft L F1..F2)]

Позволяет определить функцию пользователя. Значение функции–имя созданной функции

(DEFUN FACTORIAL (LAMBDA (N)

(COND ((ZEROP N) 0)

(T (FACTORIAL (SUB1 N))) ) ) )

FACTORIAL

GETD [A,tf]

Pезультат - тело функции А

8. Арифметические функции

Функция

Значение функции, примеры

1.

MAX[N1...Nn]

Возвращает mаксимальное из чисел N1... Nn

(MAX 5 -7 4)

5

2.

MIN[N1...Nn]

Возвращает минимальное из чисел N1...Nn

(5 -7 4)

-7

3.

+ [N1...Nn]

Возвращает сумму чисел N1+N2+...+Nn

(+ 2 3 4 -5)

4

4.

- [N1...Nn]

Возвращает разность между N1 и N2+N3+...+Nn

(- 12 5 -2)

10

5.

* [N1...Nn]

Возвращает произведение чисел: N1*N2*...*Nn

(* 3 4 5)

60

6.

/ [N1...Nn]

Возвращает результат от деления N1 на про изве-дение N2*N3*...*N4

(/ 12 5 -3)

0.8

7.

ADD1 [N]

Возвращает N, увеличенное на 1: N + 1

(ADD1 3)

4

8.

SUB1 [N]

Возвращает N, уменьшенное на 1: N - 1

(SUB1 3)

2

9.

ABS [N]

Возвращает абсолютное значение N

(ABS -3) (ABS 3)

3 3

10.

SIGNUM [N]

Возвращает знак числа: при N>0 - 0

при N<0 - 1

(SIGNUM -0.2) (SIGNUM 5)

1 0

9. Функции ввода

Функция

Значение функции, примеры

1.

RDS [D: I.R]

D: - диск; I - имя файла; R - расширение

Открывает файл на диске для считывания в оперативную память. Возвращает имя файла -

(RDS 'B:MLSP.TXT)

B:MLSP.TXT

2.

RDS []

Закрывает файл для считывания

3.

READ-CHAR []

Считывает следующий символ с текущего входного устройства и возвращает символ, чье печатное имя состоит из этих характеристик.--

4.

READ [ ]

Считывает S-выражение с текущего входного устройства и возвращает соответствующий список

5.

READ-BYTE

Считывает байт с текущего входного устройства

6.

READ-LINE[ ]

Считывает строку с с текущего входного устройства и возвращает ее в качестве результата.

7.

LISTEN [ ]

Результат - Т, если во входном устройстве есть еще символы для ввода.

10. Функции вывода

Функция

Значение функции, примеры

1.

WRS [D: I.R]

D: - диск; I - имя

файла; R - расширение -

Открывает файл на диске для вывода. Возвращает имя файла

(WRS 'B:MLSP.TXT)

B:MLSP.TXT

2.

PRINC [S]

Печатает S без перехода на новую стороку. Результат - S.

3.

PRINT [S]

Печатает S с переходом на новую стороку

4.

TERPRI [S]

На выходном устройстве пропускает N строк

5.

SPACES [N]

На выходном устройстве пропускает N позиций

6.

WRITE-BYTE [N]

На выходном устройстве печатает символ,

соответствующий ASCII коду N

11. Функции работы со строками

Функция

Значение функции, примеры

1.

SUBSTRING[atom,n,m]

Если <атом> - либо символ, либо число, <n> и <m> - неотрицательные целые, и n<=m, то (SUBSTRING атом n m) возвращает символ, у которого р-имя состоит из символов р-имени <атома>, начиная с n-го по m-й, причем отсчет

символов ведется с 0. Все значения <n> меньше, чем 0, принимаются равными 0. Если <m> пропу-щено, является отрицательным целым или больше, чем количество символов в <атом>, принимается, что <m> равно количеству символов в<atom>. Если <n> больше или равно количеству символов в<atom> или если n>m, SUBSTRING возвращает

символ, у которого р-имя есть нулевая строка. Отметим, что SUBSTRING всегда возвращает сим- вол, даже если <атом> есть число.

(SUBSTRING 'ABCDEFG 2 4) --> CDE

(SUBSTRING 'ABCDEFG 2) --> CDEFG

(SUBSTRING 'ABCDEFG 0 4) --> ABCDE

(SUBSTRING 1000 0) --> |1000|

2.

FINDSTRING[atom1,

atom2,...atomn]

(FINDSTRING атом1 атом2 n) возвращает номер позиции первого вхождения <атома1> в<атом2>, причем отсчет ведется с 0. Если<n> - ноль или положительное целое, поиск начинается с n-го символа <атома2>.

Если<атом1> не найдено, функция возвращает NIL.

(FINDSTRING 'XYZ 'ABCXYZDEFXYZGHI)  3

(FINDSTRING 'XYZ 'ABCXYZDEFXYZGHI 4)  9

(FINDSTRING 'XYZ 'ABCDEFGHI)  NIL

3.

UNPACK[atom]

(UNPACK атом) возвращает список символов полученных путем расщепления <атом>.

Если <атом> не является атомом, UNPACK возвращает NIL.

(UNPACK 'ABCDE)  (A B C D E)

(SETQ FOO -216)  -216

(UNPACK FOO)  (- \2 \1 \6)

4.

PACK [list]

PACK возвращает символ, который состоит из сцеп- ленных имен атомов в <list>. От метим, что PACK всегда возвращает символ, даже если р-имя состоит только из однозначных чисел.

(PACK '(A B C))  ABC

(PACK '(3 A 5))  3A5

5.

PACK*[atom1,atom2, atom N]

(PACK* атом1 ... атомN) возвращает символ, который состоит из сцепленных<атома1>, ..., <атомаN>.

PACK* аналогичено PACK, но работает не со спис- ком атомов, а с произвольным количеством атомов.

(PACK* 'A 'B 'C)  ABC

(PACK* 3 'A 5) 3A5

Литература

  1. Р.А.Ашинянц . Лекции по курсу функциональное программирование.

  2. П Хендерсон. Функциональное программирование. Применение и реализации. -М.:Мир, 1983.

  3. А. Филд, П.Харрисон. Функциональное программирование. -М.:, Мир, 1993.

Задачи к сдаче зачета

1. Дать рекурсивное определение функции FACTOR факториал.

2. Дать рекурсивное определение функции FIBONACCI, вычисляющей числа Фибоначчи.

3. Дать определение функции SUBLIST, выделяющей подсписок из списка атомов, начиная с n-го по m-й член.

4. Дать определение функции ОБРАЩЕНИЕ для обращения порядка следования элементов списка и его подсписков независимо от их места и глубины вложенности . В качестве обращаемого списка взять полиндром, представленный в виде списка (А (роза) (упала) (на) (лапу) (Азора)).

5. Дать рекурсивное определение функции INDEXER от двух списочных аргументов lst1 и lst2, возвращающую подсписок списка lst1, элементы которого соответствуют индексам, указанным в списке lst2.

Пример: если lst1 –> (A B C D E), а lst2 –> (4 2 0 3), то результирующий список есть (Е С А D).

Замечание. Вам понадобится встроенная функция NTH (n список), выделяющая n-1 элемент списка.

6. Дать рекурсивное определение функции MAKE-LIST от трех аргументов: n - целое число, obj - некоторый объект, lst -список. Функция создает и выдает список из n элементов, каждый из которых принимает значение объекта, присоединенного к списку.

Примеры: (make-list 3 ‘(a b c)) –>((a b c) (a b c) (a b c)); (make-list 3 5 ‘(2 3)) –>(5 5 5 2 3)

7. Дать определение функции ACONS(ключ объект а-список), создающая пару (ключ . объект) и располагающая в начале а-списка. Результатом выполнения является ассоциативный список.

Пример:(acons ‘eyes ‘blue ‘((weigth . 170)(heigth . 72)) –> ((eyes . blue) (weigth . 170) (heigth . 72))

8. Определить функцию NREVERSE(lst, obj). Функция переставляет местами элементы списка; выдает переставленный список, сцепленный с объектом.

Пример: (nreverse ‘(a b c) ‘(d e f)) –> (c b a d e f).

Подсказка: используется встроенная функция rplacd.

9. Определить функцию NBUTLAST(list, n). Функция возвращает список, состоящий из всех элементов, кроме n последних. Если n отсутствует, то принимется равной 1.

Пример: (nbutlast ‘(a b c d) 2)–> (a b)

Подсказка: в определении используется функция NREVERSE(lst, obj).

10. Определить функцию NCONC(list1, list2...listn). Функция возвращает список, состоящий из элементов списков listi в том же порядке.

Пример: (nconc ‘(a b c) ‘(d e f))–> (a b c d e f).

Подсказка: в определении используется функция rplacd -встроенная функция.

11. Определить функцию LCONC(точечная-пара, список). Функция добавляет список в конец списка, на который указывает car-элемент точечной-пары

Пример:(lconc ‘((a b) b) ‘(c d)) –>((a b c d) d)

Подсказка: в определении используется функции rplaca и rplacd -встроеннные функции (см. Примечание).

12. Определить функцию ДОБАВЬ(список, объект). Функция прибавляет к элементам списка данное число (объект).

Пример: (добавь ‘(2 7 3) 3) –> (5 10 6).

13. Определить функцию ПЕРЕВЕРНИ-И-РАЗБЕЙ(lst). Функция обраща-ет список lst и разбивает на уровни.

Пример: (переверни-и-разбей ‘(a b c)) –> (((c) b) a).

14. Определить функцию РАЗБЕЙ(lst). Функция преобразует список lst (a b c) к виду (a (b (c)).

15. Определить функцию ВЫРОВНЯЙ(lst). Функция преобразует список lst (a (b (c)) к виду (a b c).

16. Определить функцию РАСПРЕДЕЛИ(lst). Функция преобразует список lst (a b c) к виду (((a) b) c).

17. Определить функцию КАЖДЫЙ-ВТОРОЙ(lst), удаляющую из списка lst каждый второй элемент.

18. Определить функцию ПАРЫ(lst), разбивающую список lst(a b c d) на пары ((a b) (c d)...).

19. Определить функцию ЧЕРЕДУЙ(lst1 lst2), которая, чередуя элементы списков (a b c...) и (1 2...), образует новый список (a 1 b 2 ...).

20. Определить функцию AТОМОВ(lst), вычисляющую, сколько атомов в списке lst.

21. Определить функцию МНОЖЕСТВО(lst), преобразующую список в множество.

Замечание: множество - это список, в котором отсутствуют одинаковые элементы.

22. Определить функцию РАЗНОСТЬ(lst1 lst2), формирующую разность двух множеств, т. е. удаляющую из первого множества все общие со вторым множеством элементы.

23. Определить функцию MEMBER(obj lst test), проверяющую принадлежность элемента obj списку lst в соответствии с тестом test. Если tst-аргумент не задан, то принимается ‘eql-агумент.

Пример: (member ‘a ‘(b a d) ‘eql) –> (a d).

24. Определить функцию РАНЬШЕ-Р(a b порядок), которая проверяет, находится ли элемент а ранее элемента b в соответствии с расположением, определенным порядком следования элементов в списке порядок. Пример: (раньше-р ‘b ‘e ‘(a d c d e)) –> T

25. Определить функцию ИЩИ(obj lst), которая ищет в дереве (lst) элемент (obj).

Подсказка: функция ИЩИ использует в своем теле функцию РАНЬШЕ-Р, в которой в качестве теста используется предикат <. В качестве элементов дерева используйте числа.

Замечание: Упорядоченное бинарное древо состоит из узлов вида:

(элемент левое-поддерево правое-поддерево).

В каждом узле выполнено следующее условие: все элементы из узлов его левого поддерева в некотором упорядочении (например, по числовой величине или в алфавитном порядке) предшествует элементу из узла и соответственно элементы из узлов правого поддерева следуют за ним. Например:

(5 (3 (1 nil nil)

(4 nil nil))

(7 (6 nil nil)

(13 (11 nil nil)

(15 nil

Примечание. В некоторых заданиях используются следующие встроенные функции: rplaca( obj1 obj2) – obj2 заменяет car(obj1)

rplacd(obj1 obj2) – obj2 заменяет cdr(obj1)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]