Новосибирский Государственный Университет
Опубликован: 05.02.2007 | Доступ: свободный | Студентов: 2222 / 413 | Оценка: 4.30 / 4.23 | Длительность: 10:15:00
Лекция 1:

Рекурсивные функции и структуры данных

Лекция 1: 123 || Лекция 2 >
Аннотация: Целью курса является изучение языка Лисп и техники программирования на Лиспе. Первая лекция вводит общие понятия, используемые при определении языка Лисп, его реализации и применении. В центре внимания идеи символьной обработки информации и принципы функционального программирования.

Автор языка Лисп – профессор математики и философии Джон Мак-Карти, выдающийся ученый в области искусственного интеллекта. Он предложил проект языка Лисп, идеи которого возбудили не утихающие до наших дней дискуссии о сущности программирования. Сформулированная Джоном Мак-Каpти (1958) концепция символьной обработки информации восходит к идеям Чёрча и других видных математиков конца 20-ых годов предыдущего века. Выбирая лямбда-исчисление как основную модель, Мак-Карти предложил функции рассматривать как общее понятие, к которому могут быть сведены все другие понятия программирования [1].

Для работы с данным курсом можно воспользоваться комплектом GNU Clisp, на базе которого подготовлены примеры курса, выставленным на сайте http://green.iis.nsk.su/lisp

Определение 1.1

Функцией называется правило, по которому каждому значению одного или нескольких аргументов ставится в соответствие конкретное значение результата.

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

  • Алгоритм (поиск наибольшего общего делителя).
  • Таблица (сложение или умножение для целых чисел).
  • Процесс (взвешивание или измерение).
  • Устройство (вольтметр, термометр, часы)
  • Формализованный текст (процедура, подпрограмма, макрос и т.п.).

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

Определение 1.2

Вычисление – процесс решения задачи, сводимой к обработке чисел, кодов или символов, рассматриваемых как модели реальных объектов.

Соответствие между моделью и объектом часто называют интерпретацией.

Список – основная структура данных языка Лисп. Список может быть пустым или содержать произвольное число объектов любой природы. Пустой список используется в качестве истинностного значения, "ложь" - все остальное "истина".

Определение1.3

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

Кроме списков в языке Лисп имеются более общие структуры данных – символьные выражения (S-выражения), реализуемые как двоичные деревья, а Лисп-системы поддерживают обработку различных специальных структур данных, таких как вектора, массивы, строки, хэш-таблицы, файлы, потоки ввода-вывода и др.

Определение 1.4

Двоичное дерево – это ориентированный граф, из каждой вершины которого выходит не более двух дуг.

Элементарные данные языка Лисп называются атомами. Атомы могут иметь вид имен, чисел или других объектов, неделимых базовыми средствами языка.

Атомы, выглядящие как имена, могут обладать свойствами, задаваемыми системой или программой. Значения переменных и определения функций – примеры свойств. Особый интерес представляют рекурсивные функции и методы их реализации в системах программирования.

Определение 1.5

Функция называется рекурсивной, если ее определение прямо или косвенно (через другие функции ) содержит обращение к самой себе.

Лекция 1: 123 || Лекция 2 >