Реферат: ЛИСП

                                                   Введение.

В последнее время особыйинтерес приобрела технология искусственного интеллекта (ИИ). Вычислительныеустройства, обладающие в той или иной степени «интеллектуальными способностями,стали встраивать даже в бытовые приборы.

С развитием ИИ появилосьбольшое количество специализированных языков программирования: Лисп, Пролог,Лого, Конивер и другие. Они постоянно развивались, оказывали взаимное влияниедруг на друга, многие, не долго просуществовав, исчезали, но порождали идеи,которые давали новый толчок к мощному языкотворчеству в своей области.

Ведущее место среди языковИИ занимает Лисп, а точнее, множество его диалектов. Длительное время несуществовало стандарта этого языка. Но такое разнообразие не доставлялонеприятностей, пока язык использовался лишь в исследованиях. Даже напротив,идеи Лиспа таким образом могли постоянно развиваться и поэтому в язык вошлиновые, оказавшиеся полезными свойства, в том числе и из других языков. Однаконедостатки, возникающие из-за несовместимости между диалектами становились всеболее существенными по мере роста числа практических приложений Лиспа.

В конечном счете стандартязыка был разработан. Им стал CommonLisp.Этот диалект содержит важнейшие черты современных Лисп-систем: разнообразныетипы данных, возможности определения типов, управляющие структуры, макросы спомощью которых легко определяются новые синтаксические формы, функционалы,замыкания, последовательности, а также синтаксический интерпретатор и транслятор.Можно сказать, что CommonLispсодержит почти все, что насегодняшний день могут дать другие известные языки программирования, и кроме того,он предусматривает средства для расширения.

Особенностям языка Лисп ипосвящена данная дипломная работа, целью которой является разработкалабораторных работ по курсу «Системы искусственного интеллекта» для студентовспециальности «Компьютерные и интеллектуальные системы и сети», а также расширениеЛисп-библиотек для интегрированной среды dlisp.

В первой части дипломнойработы проведен анализ языков программирования искусственного интеллекта.Особое место уделено анализу диалектов языка Лисп. В конце раздела подводятсяитоги анализа и обосновывается выбор конкретного диалекта Лиспа ивырабатывается постановка задачи.

Вторая часть дипломнойработы посвящена конкретно языку Лисп. Здесь рассматриваются общие особенностии понятия языка, присущие всем диалектам Лиспа.

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

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

В заключении работыподводятся итоги проделанной работы.

<span Arial",«sans-serif»;mso-fareast-font-family:«Times New Roman»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US;mso-fareast-language:KO;mso-bidi-language: AR-SA">

              1 Литературный обзор.

1.1 Краткаяистория развития искусственного интеллекта.

Искусственныйинтеллект (ИИ) — это область исследований, находящаяся на стыке наук, специалисты,работающие в этой области, пытаются понять, какое поведение, считается разумным(анализ), и создать работающие модели этого поведения (синтез). Практическойцелью является создание методов и техники, необходимой для программирования«разумности» и ее передачи вычислительным машинам (ВМ), а через нихвсевозможным системам и средствам.[1]

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

В 60-х годахпредпринимались попытки отыскать общие методы решения широкого класса задач,моделируя сложный процесс мышления. Разработка универсальных программ оказаласьслишком трудным и бесплодным делом. Чем шире класс задач, которые может решатьодна программа, тем беднее оказываются ее возможности при решении конкретнойпроблемы.[5]

В начале 70-хгодов специалисты в области ИИ сосредоточили свое внимание на разработкеметодов и приемов программирования, пригодных для решения болееспециализированных задач: методов представления (способы формулированияпроблемы для решения на средствах вычислительной техники (ВТ)) и методах поиска(способы управления ходом решения так, чтобы оно не требовало слишком большогообъема памяти и времени).

И только вконце 70-х годов была принята принципиально новая концепция, котораязаключается в том, что для создания интеллектуальной программы ее необходимоснабдить множеством высококачественных специальных знаний о некоторойпредметной области. Развитие этого направления привело к созданию экспертныхсистем (ЭС).[6]

В 80-х годах ИИпережил второе рождение. Были широко осознаны его большие потенциальныевозможности как в исследованиях, так и в развитии производства. В рамках новойтехнологии появились первые коммерческие программные продукты. В это времястала развиваться область машинного обучения. До этих пор перенесение знанийспециалиста-эксперта в машинную программу было утомительной и долгойпроцедурой. Создание систем, автоматически улучшающих и расширяющих свой запасэвристических (не формальных, основанных на интуитивных соображениях) правил — важнейший этап в последние годы. В начале десятилетия в различных странах былиначаты крупнейшие в истории обработки данных национальные и международныеисследовательские проекты, нацеленные на «интеллектуальные ВМ пятогопоколения».[1]

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

n<span Times New Roman"">

обработка естественного языка;

n<span Times New Roman"">

экспертные системы (ЭС);

n<span Times New Roman"">

символьные и алгебраические вычисления;

n<span Times New Roman"">

доказательства и логическое программирование;

n<span Times New Roman"">

программирование игр;

n<span Times New Roman"">

обработка сигналов и распознавание образов;

n<span Times New Roman"">

и др.

1.2 Языки программирования ИИ.

1.2.1 Классификация языков истилей программирования.

Все языки программирования можно разделитьна процедурные и декларативные языки. Подавляющее большинство используемых внастоящее время языков программирования (Си, Паскаль, Бейсик и т. п.) относятсяк процедурным языкам. Наиболее существенными классами декларативных языковявляются функциональные (Лисп, Лого, АПЛ и т. п.) и логические (Пролог, Плэнер,Конивер и др.) языки (рис.1).

На практикеязыки программирования не являются чисто процедурными, функциональными илилогическими, а содержат в себе черты языков различных типов. На процедурномязыке часто можно написать функциональную программу или ее часть и наоборот.Может точнее было бы вместо типа языка говорить о стиле или методепрограммирования. Естественно различные языки поддерживают разные стили вразной степени.[1]

Процедурнаяпрограмма состоит из последовательности операторов и предложений, управляющихпоследовательностью их выполнения. Типичными операторами являются операторыприсваивания и передачи управления, операторы ввода-вывода и специальныепредложения для организации циклов. Из них можно составлять фрагменты программи подпрограммы. В основе процедурного программирования лежат взятие значениякакой-то переменной, совершение над ним действия и сохранения нового значения спомощью оператора присваивания, и так до тех пор пока не будет получено (и,возможно, напечатано) желаемое окончательное значение.[2]

<img src="/cache/referats/1267/image001.gif" v:shapes="_x0000_s1026">                     ЯЗЫКИ ПРОГРАММИРОВАНИЯ

<img src="/cache/referats/1267/image002.gif" v:shapes="_x0000_s1027 _x0000_s1034"> <img src="/cache/referats/1267/image003.gif" " v:shapes="_x0000_s1035">


<img src="/cache/referats/1267/image004.gif" v:shapes="_x0000_s1037"><img src="/cache/referats/1267/image004.gif" v:shapes="_x0000_s1036"><img src="/cache/referats/1267/image005.gif" v:shapes="_x0000_s1029">ПРОЦЕДУРНЫЕ ЯЗЫКИ     ДЕКЛАРАТИВНЫЕ ЯЗЫКИ

<img src="/cache/referats/1267/image006.gif" v:shapes="_x0000_s1028">Паскаль, Си, Фортран,...                         

<img src="/cache/referats/1267/image007.gif" v:shapes="_x0000_s1030"> <img src="/cache/referats/1267/image008.gif" v:shapes="_x0000_s1032">


<img src="/cache/referats/1267/image009.gif" v:shapes="_x0000_s1033"><img src="/cache/referats/1267/image007.gif" v:shapes="_x0000_s1031">                 ЛОГИЧЕСКИЕ ЯЗЫКИ     ФУНКЦИОНАЛЬНЫЕ ЯЗЫКИ   

                  Пролог,Mandala...                      Лисп, Лого, АРЛ, ...

                      

Рис.1Классификация языков программирования

Логическоепрограммирование — это один из подходов к информатике, при котором в качествеязыка высокого уровня используется логика предикатов первого порядка в формефраз Хорна. Логика предикатов первого порядка — это универсальный абстрактныйязык предназначенный для представления знаний и для решения задач. Его можнорассматривать как общую теорию отношений. Логическое программированиебазируется на подмножестве логики предикатов первого порядка, при этом оноодинаково широко с ней по сфере охвата. Логическое программирование даетвозможность программисту описывать ситуацию при помощи формул логикипредикатов, а затем, для выполнения выводов из этих формул, применитьавтоматический решатель задач (т. е. некоторую процедуру). При использованииязыка логического программирования основное внимание уделяется описаниюструктуры прикладной задачи, а не выработке предписаний компьютеру о том, чтоему следует делать. Другие понятия информатики из таких областей, как теорияреляционных баз данных, программная инженерия и представление знаний, такжеможно описать (и, следовательно, реализовать) с помощью логических программ.[8].

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

Каждый вызоввозвращает некоторое значение в вызывавшую его функцию, вычисление которойпосле этого продолжается; этот процесс повторяется до тех пор пока запустившаявычисления функция не вернет конечный результат пользователю.

«Чистое»функциональное программирование не признает присваиваний и передач управления.Разветвление вычислений основано на механизме обработки аргументов условногопредложения. Повторные вычисления осуществляются через рекурсию, являющуюсяосновным средством функционального программирования.[1]    

 

1.2.2 Сравнительные характеристики языков ИИ.

На первом этаперазвития ИИ (в конце 50-х — начале 60-х годов) не существовало языков и систем,ориентированных специально на области знаний. Появившиеся к тому времениуниверсальные языки программирования казались подходящим инструментом длясоздания любых (в том числе и интеллектуальных ) систем, поскольку в этихязыках можно выделить декларативную и процедурную компоненты. Казалось, что наэтой базе могут быть интерпретированы любые модели и системы представлениязнаний. Но сложность и трудоемкость таких интерпретаций оказались настольковелики, что прикладные системы для реализации были недоступны. Исследованияпоказали, что производительность труда программиста остается постояннойнезависимо от уровня инструментального языка, на котором он работает, асоотношение между длиной исходной и результирующей программ примерно 1:10.Таким образом, использование адекватного инструментального языка повышаетпроизводительность труда разработчика системы на порядок, и это приодноступенчатой трансляции. Языки предназначенные для программированияинтеллектуальных систем содержат иерархические (многоуровневые) трансляторы иувеличивают производительность труда в 100-ни раз. Все это подтверждаетважность использования адекватных инструментальных средств.[7]

1.2.2.1 Языки обработки символьной информации.

Лисп.

ЯзыкЛисп был разработан в Стэнфорде под руководством Дж. Маккарти в начале 60-хгодов. По первоначальным замыслам он должен был0 включать наряду со всемивозможностями Фортрана средства работы с матрицами, указателями и структурамииз указателей и т. п. Но для такого проекта не хватило средств. Окончательносформированные принципы положенные в основу языка Лисп: использование единогоспискового представления для программ и данных; применение выражений дляопределения функций; скобочный синтаксис языка.[4]

Лиспявляется языком низкого уровня, его можно рассматривать как ассемблер,ориентированный на работу со списковыми структурами. Поэтому на протяжениивсего существования языка было много попыток его усовершенствования за счетвведения дополнительных базисных примитивов и управляющих структур. Но все этиизменения, как правило, не становились самостоятельными языками. В новых своихредакциях Лисп быстро усваивал все ценные изобретения своих конкурентов.[2]

Послесоздания в начале 70-х годов мощных Лисп-систем Маклисп Интерлисп попыткисоздания языков ИИ, отличных от Лиспа, но на той же основе, сходят на нет.Дальнейшее развитие языка идет, с одной стороны, по пути его стандартизации(Стандарт-Лисп, Франц-Лисп, Коммон Лисп), а с другой — в направлении созданияконцептуально новых языков для представления и манипулирования знаниями в Лиспсреде. В настоящее время Лисп реализован на всех классах ЭВМ, начиная с ПЭВМ икончая высоко производительными вычислительными системами.

Лисп- не единственный язык, используемый для задач ИИ. Уже в середине 60-х годовразрабатывались языки, предлагающие другие концептуальные основы. Наиболееважные из них в области обработки символьной информации — СНОБОЛ и Рефал.

СНОБОЛ.

Этоязык обработки строк, в рамках которого впервые появилась и была реализована вдостаточно полной мере концепция поиска по образцу. Язык СНОБОЛ был одной изпервых практических реализаций развитой продукционной системы. Наиболееизвестная и интересная версия этого языка — Снобол-4 Здесь техника заданияобразцов и работа с ними существенно опередили потребности практики. Посуществу, он так и остался «фирменным» языком программирования, хотя концепцииСНОБОЛа, безусловно, оказали влияние и на Лисп, и на другие языки программированиязадач ИИ.

Рефал.

ЯзыкРефал — алгоритмический язык рекурсивных функций. Он был создан Турчиным вкачестве метаязыка, предназначенного для описания различных, в том числе иалгоритмических, языков и различных видов обработки таких языков. При этомимелось в виду и использование Рефала  вкачестве метаязыка над самим собой. Для пользователя это язык обработкисимвольной информации. Поэтому, помимо описания семантики алгоритмическихязыков, он нашел и другие применения. Это выполнение громоздких аналитическихвыкладок в теоретической физике и прикладной математике, интерпретация икомпиляция языков программирования, доказательство теорем, моделированиецеленаправленного поведения, а в последнее время и задачи ИИ. Общим для всехэтих применений являются сложные преобразования над объектами, определенными внекоторых формализованных языках.

 В основу языка Рефал положено понятие рекурсивнойфункции, определенной на множестве произвольных символьных выражений. Базовойструктурой данных этого языка являются списки, но не односвязные, как в Лиспе,а двунаправленные. Обработка символов ближе к продукционной парадигме. При  этом Активно используется концепция поиска пообразцу, характерная для СНОБОЛа.

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

Вомногих случаях возникает необходимость из программ, написанных на Рефале,вызывать программы, написанные на других языках. Это просто, так как с точкизрения Рефала первичные функции (Функции, описанные не на Рефале, но которыетем не менее можно вызывать из программ, написанных на этом языке.) — этопросто некоторые функции, внешние по отношению к данной программе, поэтому,вызывая какую-либо функцию, можно даже и не знать, что это — первичная функция.

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

Частобывает удобно разбить Рефал-программу на части, которые могут обрабатыватьсякомпилятором Рефала независимо друг от друга. Наименьшая часть Рефал-программы,которая может быть обработана компилятором независимо от других, называетсямодулем. Результат компиляции исходного модуля на Рефале представляет собойобъектный модуль, который перед исполнением Рефал-программы должен бытьобъединен с другими модулями, полученными компиляцией с Рефала или другихязыков это объединение выполняется с помощью редактора связей и загрузчиков.Детали зависят от используемой ОС.

Такимобразом, Рефал вобрал в себя лучшие черты наиболее интересных языков обработкисимвольной информации 60-х годов. В настоящее время язык Рефал используется дляавтоматизации построения трансляторов, систем аналитических преобразований, атакже, подобно Лиспу, в качестве инструментальной среды для реализации языковпредставления знаний.[7]

Пролог.

Вначале 70-х годов появился новый язык составивший конкуренцию Лиспу приреализации систем, ориентированных на знания — Пролог. Этот язык не дает новыхсверхмощных средств программирования по сравнению с Лиспом, но поддерживаетдругую модель организации вычислений. Его привлекательность с практическойточки зрения состоит в том, что, подобно тому, как Лисп скрыл от программистаустройство памяти ЭВМ, Пролог позволил ему не заботится о потоке управления впрограмме.[8]

Пролог- европейский язык, был разработан в Марсельском университете в 1971 году. Нопопулярность он стал приобретать только в начале 80-х годов. Это связано сдвумя обстоятельствами: во-первых, был обоснован логический базис этого языкаи, во-вторых, в японском проекте вычислительных систем пятого поколения он былвыбран в качестве базового для одной из центральных компонент — машины вывода.

ЯзыкПролог базируется на ограниченном наборе механизмов, включающих в себясопоставление образцов, древовидное представление структур данных иавтоматический возврат. Пролог особенно хорошо приспособлен для решения задач,в которых фигурируют объекты и отношения между ними.[9]

Прологобладает мощными средствами, позволяющими извлекать информацию из баз данных,причем методы поиска данных, используемые в нем, принципиально отличаются оттрадиционных. Мощь и гибкость баз данных Пролога, легкость их расширения имодификации делают этот язык очень удобным для коммерческих приложений.

Прологуспешно применяется в таких областях как: реляционные базы данных (языкособенно полезен при создании интерфейсов реляционных баз данных спользователем); автоматическое решение задач; понимание естественного языка;реализация языков программирования; представление знаний; экспертные системы идр. задачи ИИ.[9]

Теоретическойосновой Пролога является исчисление предикатов. Прологу присущ ряд свойств,которыми не обладают традиционные языки программирования. К таким свойствамотносятся механизм вывода с поиском и возвратом, встроенный механизмсопоставления с образцом. Пролог отличает единообразие программ и данных. Ониявляются лишь различными точками зрения на объекты Пролога. В языке отсутствуютуказатели, операторы присваивания и безусловного перехода. Естественным методомпрограммирования является рекурсия.

Прологпрограмма состоит из двух частей: базы данных (множество аксиом) и последовательностицелевых утверждений, описывающих в совокупности отрицание доказываемой теоремы.Главное принципиальное отличие интерпретации программы на Прологе от процедурыдоказательства теоремы в исчислении предикатов первого порядка состоит в том,что аксиомы в базе данных упорядочены и порядок их следования весьмасущественен, так как на этом основан сам алгоритм, реализуемыйПролог-программы. Другое существенное ограничение Пролога в том, что в качествелогических аксиом используются формулы ограниченного класса — так называемыедизъюнкты Хорна. Однако при решении многих практических задач этого достаточнодля адекватного представления знаний. Во фразах Хорна после единственногозаключения следует ноль и более условий.

Поиск«полезных» для доказательства формул — комбинаторная задача и при увеличениичисла аксиом число шагов вывода катастрофически быстро растет. Поэтому вреальных системах применяют всевозможные стратегии, ограничивающие слепойперебор. В языке Пролог реализована стратегия линейной резолюции, предлагающаяиспользование на каждом шаге в качестве одной из сравниваемых формул отрицаниетеоремы или ее «потомка», а в качестве другой — одну из аксиом. При этом выбортой или иной аксиомы для сравнения может сразу или через несколько шаговзавести в «тупик». Это принуждает вернуться к точке, в которой производилсявыбор, чтобы испытать новую альтернативу, и т. д. Порядок просмотраальтернативных аксиом не произволен — его задает программист, располагаяаксиомы в базе данных в определенном порядке. Кроме того в Прологепредусмотрены достаточно удобные «встроенные» средства для запрещения возвратав ту или иную точку в зависимости от выполнения определенных условий. Такимобразом процесс доказательства в Прологе более прост и целенаправлен чем вклассическом методе резолюций.

Смыслпрограммы языка Пролог может быть понят либо с позиций декларативного подхода,либо с позиций процедурного подхода.[8]

Декларативныйсмысл программы определяет, является ли данная цель истинной (достижимой) и,если да, при каких значениях переменных она достигается. Он подчеркиваетстатическое существование отношений. Порядок следования подцелей в правиле невлияет на декларативный смысл этого правила. Декларативная модель более близкак семантике логики предикатов, что делает Пролог эффективным языком дляпредставления знаний. Однако в декларативной модели нельзя адекватнопредставить те фразы, в которых важен порядок следования подцелей. Дляпояснения смысла фраз такого рода необходимо воспользоваться процедурноймоделью.

Припроцедурной трактовке Пролог-программы определяются не только логические связимежду головой предложения и целями в его теле, но еще и порядок, в котором этицели обрабатываются. Но процедурная модель не годится для разъяснения смыслафраз, вызывающих побочные эффекты управления, такие как остановка выполнениязапроса или удаление фразы из программы.[9]

Длярешения реальных задач ИИ необходимы машины, скорость которых должна превышатьскорость света, а это возможно лишь в параллельных системах. Поэтому последовательныереализации следует рассматривать как рабочие станции для создания программногообеспечения будущих высокопроизводительных параллельных систем, способныхвыполнять сотни миллионов логических выводов в секунду. В настоящее времясуществуют десятки моделей параллельного выполнения логических программ вообщеи Пролог-программ в частности. Часто это модели, использующие традиционныйподход к организации параллельных вычислений: множество параллельно работающихи взаимодействующих процессов. В последнее время значительное вниманиеуделяется и более современным схемам организации параллельных вычислений — потоковым моделям. В моделях параллельного выполнения рассматриваютсятрадиционный Пролог и присущие ему источники параллельности.

 На эффективности Пролога очень сильносказываются ограниченность ресурсов по времени и пространству. Это связано снеприспособленностью традиционной архитектуры вычислительных машин дляреализации прологовского способа выполнения программ, предусматривающегодостижение целей из некоторого списка. Вызовет ли это трудности в практическихприложениях, зависит от задачи. Фактор времени практически не имеет значения,если пролог-программа, запускаемая по несколько раз в день, занимает однусекунду, а соответствующая программа на другом языке — 0.1 секунды. Но разницав эффективности становится существенной, если эти две программы требуют 50 и 5минут соответственно.

Сдругой стороны, во многих областях применения Пролога он может существенносократить время разработки программ. Программы на Прологе легче писать, легчепонимать и отлаживать, чем программы, написанные на традиционных языках, т. е.язык Пролог привлекателен своей простотой. Пролог-программу легко читать, чтоявляется фактором, способствующим повышению производительности при программированиии увеличению удобств при сопровождении программ. Поскольку Пролог основан нафразах Хорна, исходный текст Пролог-программ значительно менее подверженвлиянию машинно-зависимых особенностей, чем исходные тексты программ,написанных на других языках. Кроме того в различных версиях языка Прологпроявляется тенденция к единообразию, так что программу, написанную для однойверсии, легко можно преобразовать в программу для другой версии этого языка.Кроме того Пролог прост в изучении.[8]

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

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

1.2.2.2 Языки программирования интеллектуальных решателей.

Группаязыков, которые можно назвать языками интеллектуальных решателей, в основномориентирована на такую подобласть ИИ, как решение проблем, для которойхарактерны, с одной стороны, достаточно простые и хорошо формализуемые моделизадач, а с другой — усложненные методы поиска их решения. Поэтому основноевнимание в этих языках было уделено введению мощных структур управления, а неспособам представления знаний. Это такие языки как Плэнер, Конивер, КюА-4, КюЛисп.

Плэнер.

Этотязык дал толчок мощному языкотворчеству в области ИИ. Язык разработан вМассачуссетском технологическом институте в 1967-1971гг. Вначале это быланадстройка над Лиспом, в таком виде язык реализован на Маклиспе под названиемМикро Плэнер. В дальнейшем Плэнер был существенно расширен и превращен всамостоятельный язык. В СССР он реализован под названием Плэнер-БЭСМ иПлэнер-Эльбрус. Этот язык ввел в языки программирования много новых идей:автоматический поиск с возвратами, поиск данных по образцу, вызов процедур пообразцу, дедуктивный метод и т. д.

Вкачестве своего подмножества Плэнер содержит практически весь Лисп (снекоторыми модификациями) и во многом сохраняет его специфические особенности.Структура данных (выражений, атомов и списков), синтаксис программ и правила ихвычисления в Плэнере аналогичны лисповским. Для обработки данных в Плэнере восновном используются те же средства, что и в Лиспе: рекурсивные и блочныефункции. Практически все встроенные функции Лиспа, в том числе и функция EVAL,включены в Плэнер. Аналогично определяются новые функции. Как и в Лиспе, с атомамимогут быть связаны списки свойств.

Номежду Лиспом и Плэнером существуют и различия. Отметим некоторые из них. ВЛиспе при обращении к переменной указывается только ее имя, например Х, сам жеатом как данное указывается как ‘X. В Плэнере используется обратнаянотация: атомы обозначают самих себя, а при обращении к переменным перед ихименем ставится префикс. При этом префикс указывает как должна бытьиспользована переменная. Отличается от лисповского и синтаксис обращения кфункциям, которое в Плэнере записывается в виде списка не с круглыми, а сквадратными скобками.

Дляобработки данных в Плэнере используются не только функции, но и образцы исопоставители.

Образцыописывают правила анализа и декомпозиции данных и поэтому их применениеоблегчает написание программ и сокращает их тексты.

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

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

НаПлэнере можно программировать описывая то, что имеется и то что надо получить,без явного указания, как это делать. Ответственность же за поиск решенияописываемой задачи берет на себя встроенный в язык дедуктивный механизм(механизм автоматического достижения целей), в основе которого лежит вызовтеорем по образцу. Однако только вызова теорем по образцу не достаточно длятакого механизма. Необходим механизм перебора, и такой механизм — режимвозвратов — введен в язык.

Выполнениепрограммы в режиме возвратов удобно для ее автора тем, что язык берет на себяответственность за запоминание развилок и оставшихся в них альтернатив, заосуществление возвратов к ним и восстановления прежнего состояния программы — все это делается автоматически. Но такой автоматизм не всегда выгоден, так какв общем случае он ведет к «слепому» перебору. И может оказаться так, что привызове теорем наиболее подходящая из них будет вызвана последней, хотя авторпрограммы заранее знает о ее достоинствах. Учитывая это Плэнер предоставляетсредства управления режимом возвратов.[7]

Конивер.

ЯзыкКонивер был разработан в 1972 году, реализован как надстройка над языкомМаклисп. Авторы языка Конивер выступили с критикой некоторых идей языка Плэнер.В основном она относилась к автоматическому режиму возвратов, который в общемслучае ведет к неэффективным и неконтролируемым программам, особенно если онасоставляется неквалифицированными пользователями. Авторы Конивер отказались отавтоматического режима возвратов, считая, что встраивать в язык какие-тофиксированные дисциплины управления (кроме простейших — циклов, рекурсий) неследует и что автор программы должен сам организовывать нужные ему дисциплиныуправления, а для этого язык должен открывать пользователю свою структурууправления и предоставлять средства работы с ней. Эта концепция былареализована в Конивер следующим образом.

Привызове процедуры в памяти отводится место, где хранится информация, необходимаядля ее работы. Здесь, в частности, располагаются локальные переменныепроцедуры, указатели доступа (ссылка на процедуру, переменные которой доступныиз данной) и возврата (ссылка на процедуру, которой надо вернуть управление).Обычно эта информация скрыта от пользователя, а в языке Конивер такой участокпамяти (фрейм) открыт: пользователь может просматривать и менять содержимоефрейма. В языке фреймы представляют специальный тип данных, доступ к которымосуществляется по указателям.

Недостатокязыка в том, что хотя пользователь и получает гибкие средства управления,одновременно на него ложится трудная и кропотливая работа, требующая высокойквалификации. Язык Конивер хорош не для реализации сложных систем, а как база,на основе которой квалифицированные программисты готовят нужные механизмыуправления для других пользователей.

Учитываясложность реализации дисциплин управления, авторы языка были вынуждены включитьв него ряд фиксированных механизмов управления, аналогов процедур-развилок итеорем языка Плэнер. Но в отличии от Плэнера, где разрыв между выборомальтернативы в развилке и ее анализом, а в случае необходимости выработкойнеуспеха может быть сколь угодно велик, в языке Конивер этот разрыв сведен кминимуму. Этим Конивер избавляется от негативных последствий глобальныхвозвратов по неуспеху, когда приходится отменять предыдущую работу чуть ли невсей программы.[7]

1.2.2.3 Языки представления знаний.

Врамках каждого базового языка ИИ явным образом выделяются и прямое егоиспользование, и расширение за счет пакетов функций, и создание «автономного»языка представления знаний (ЯПЗ) с последующей интерпретацией или компиляциейпрограмм на созданном языке. Но в последнем случае базовый язык, как правило,становится инструментальным средством для реализации ЯПЗ.

Независимоот реализации ЯПЗ должен отвечать следующим требованиям:

n<span Times New Roman"">

наличие простых и вместе с тем достаточно мощных средств представлениясл
еще рефераты
Еще работы по программированию, базе данных