Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Функцилональное программирование лекции 4 семес...docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
27.91 Кб
Скачать

Функции. Базовые функции.

Префиксная запись: Будет записан следующий список, например (h x (g y z)) . Аналогично, (* x ( + y z)) в математике рассматривается как x*(y+z) .

Несколько приемуществ префиксной записи:

С точки зрения алгоритмов, префексный вариант наиболее понятен, то есть в первую очередь будет прочитан символ, обозначающий действие. А потом уже, будет обозначен символ, с которым он будет выполняться. С помощью выражений, записанных в префиксной форме, будет записано большинство выражений в ЛИСП. Так как в большинстве случаев ЛИСП работает как интерпретатор, существует некий сивол, котррый ставится в начале строики, и используется для выполнения строки. Например, в вижуал это *. *(+8 5) После нажатия энтыра будет результат 13.

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

*’(+ 8 5) рехзультат будет (+ 8 5)

Полное название ‘ – операция отмены, QUOTE. Во многих интерепретаторах, есть более удобное обозначение, вместо этих неудобных 5 символов.

QUOTE – специальная функиця с 1 агрументом, которая возвращает в качестве значения этот аргумент.

Ещё одна функиця – EVAL. Обеспечивает дополнительный вызов интерпретатора ЛИСП. Возможно, внутри вычисляемого S- выражения.

Примера:

*(EVAL’(+ 8 5))

Ответ: 13.

Использование символов в качестве переменных.

Изначально символы в ЛИСП значения не имеют. Значения имеют только констанаты.

Пример:

*t | *1.6 | *a – ошибка

Чтобы связать значение с символом, нужно выполнить одну из трех операций: в лиспе присваиванияе называется связанием. Символы в ЛИСП хранятся в ячейках, если в эту ячейку было записано значение, тогда значит эту ячейкус вязали со значением. Связать ячейку можно с фкнкциями, которые начинаются с SET.

*(set ‘d ‘ (x y z))

В качестве результата будет выдан список (x y z)

И с d будет связан этот список.

И если теперь мы дадим команду *d то выдатся нам (x y z).

Здесь апострофы очень важны.

Второй вариант функции : *(setq d’ (…))

*(setq a d)

Базовые функции.

Для работы с рекурсией важно следующее представление по спискам: изображаем список в виде многосегментного списка. В списке стандартно разливется 2 его части.

Голова Всё кроме головы.

Голова – это элемент, а всё кроме головы – список, возможно пустой. В общем, после каждого отрубания головы, новая голова – есть хвост. То есть первый элемент среди элементов «все крмое головы.»

car – первый элемент, доступ к голове,

cdr – лоступ к хвосту

caddr – доступ к 3 элементу.

Cadddr – к 4 элементу.

Противоположное действие выполняет функция cons. У этой функции 2 аргумента. Первый аругмент – атом, второй список:

(cons <атом><список>)

Во многих, Связанных со списками приложениях, говорится, что разрубив голову и хвост мы получим исходный список.

(cons (car list) (cdr list))

Лекция № 2.

(NTH <N> <cn> <k>)

N- номер

Cn – список

K – количество элементов

List – формирует список из S – выражений. Могут быть выражения как атомами так и списками. Колличество аргументов – переменное.

(LIST S1 S2 S3…)

Выражение:*(LIST’ (ab) 3 7)

Результат: ((ab) 3 7)

(LENGTH <List>) - Позволяет вычислять количество элементов в списке.