- •Модуль 1. Приемы программирования на пролоГе.
- •Тема 1. Основные понятия и определения логического программирования.
- •Лекция 1
- •1. Язык логического программирования пролог.
- •1.1 Основные понятия и определения
- •Лекция 2
- •1.2 Создание консольного приложения. Структура файла main.Pro.
- •1.3 Примеры построения правил
- •Лекция 3
- •1.5 Согласование целевых утверждений. Поиск с возвратом
- •1.5 Рекурсия в пролоГе.
- •Лекция 4
- •1.6 Средства управления пролог-программой. Отладка пролог-программ.
- •1.7 Стандартные предикаты обработки строк
- •1.8 Средства ввода и вывода. Работа с файлами.
- •Лекция 4
- •1.9 Изображение и обработка списков
- •Лекция 5
- •1.10 Динамические базы данных
- •2. Язык функционального программирования лисп Введение
- •2.1 Объекты данных Лиспа
- •2.2 Основные функции лисПа
- •2.2.1 Функции назначения
- •2.2.2 Числовые функции
- •2.2.3 Базовые функции лисПа
- •2.3 Основы работы в среде mulisp-85
- •2.4 Трассировка функций в muLisp.
- •2.4 Определение функций в лисПе
- •2.6 Рекурсивные определения и вычисления
- •Задания для лабораторных работ
2. Язык функционального программирования лисп Введение
На сегодня ЛИСП вместе с Прологом является одним из главных инструментальных средств систем искусственного интеллекта.
Язык ЛИСП (LISP) был разработан в 1958 году американским ученым Джоном Маккарти как функциональный язык, предназначенный для обработки списков. (LISt Processing).
Lisp - означает "лепетать". С появлением этого языка машина стала пока лепетать, a не говорить по-человечески.
В основу языка положен серьезный математический аппарат:
лямбда-исчисление Черча
алгебра списочных структур
теория рекурсивных функций
Долгое время язык использовался узким кругом исследователей. Широкое распространение язык получил в конце 70-х - начале 80-х годов с появлением необходимой мощности вычислительных машин и соответствующего круга задач.В настоящем - Лисп одно из главных инструментальных средств систем искусственного интеллекта. Он принят как один из двух основных ЯП для министерства обороны США и постепенно вытесняет второй ЯП - АДА.
Система AutoCAD разработана на Лиспе.
Лиспимеет необычный синтаксис. Из-за большего числа скобокLISP расшифровывают какLots of Idiotic Silly Parentheses.
Функциональное программирование – это такой способ представления программ, в котором единственным действием является вызов функции. Функция – это изображение вычислений или их определение, а вызов функции – применение этого изображения. Результатом этого применения является значение функции.
Повторные вычисления осуществляются с помощью рекурсии, которая является основным средством функционального программирования.
ЛІСП не является типизированным языком. В нем имена символов, переменных, списков, функций и других объектов не закреплены изначально за какими-то определенными типами данных. Типы вообще не связаны с именами объектов, а сопровождают сами объекты. Но каждая функция выполняет действия только над аргументами определенного типа.
Чисто функциональным стилем программирования называется программирование, в котором аргументы передаются в виде списка, а результат вычислений возвращается через имя функции, При этом, если аргументы также являются функциями, то сначала вычисляются аргументы.
Основу ЛИСПа составляют символьные выражения, которые называются S-выражениями и образовывают область определения функциональных программ. S-выражением называется последовательность атомов, списков и S-выражений, расположенных в сбалансированных скобках. При этом на первом месте после скобок, которые открываются, обязательно должно стоять имя функции.
2.1 Объекты данных Лиспа
Определение S-выражения является рекурсивным и очерчивает круг объектов Лиспа, а именно, ими могут быть только атомы и списки.
Объекты могут быть двух типов: простые и составные.
Простые объекты называются атомами. К атомам относятся символы и числа. Символ не может начинаться с цифры. muLisp не различает маленькие буквы, а заменяет все введенные буквы на заглавные. Атом является неделимым, т.е. его нельзя разбить на компоненты. Символы T и NIL имеют в ЛИСПе специальное назначение: они обозначают соответственно логические значения истина и ложь. Они должны всегда иметь одно фиксированное значение и не допускается их использование в качестве имен других объектов. Числа и логические значения T и NIL являются константами, все другие символы – переменными.
Составными объектами данных являются списки. Список включает нуль (пустой список) или больше объектов, каждый из которых может быть как простым, так и составным. Списки записывают в скобках, а их элементы разделяются пробелами.
Так (FACE LOOK NOSE) является списком, который состоит из трех атомов. Пустой список обозначается как ( ), так и NIL и является атомом.
Список называется линейным, если его элементы являются атомами. Иначе говорят о списках с подсписками, например: (7 (8 9) TR).