
- •История развития фп.
- •Введение в лисп.
- •Элементарные понятия лисп.
- •Функции. Базовые функции.
- •Использование символов в качестве переменных.
- •Базовые функции.
- •Лекция № 2.
- •Арифметические функции
- •Определение функций.
- •Передача параметров глобальной и локальной переменной.
- •Дополнительные функции обработки списков.
- •Логические функции.
- •Управляющие структуры.
Функции. Базовые функции.
Префиксная запись: Будет записан следующий список, например (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>) - Позволяет вычислять количество элементов в списке.