2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Логическое программирование на Пролог
Сообщение08.04.2006, 18:41 
Заслуженный участник
Аватара пользователя


07/03/06
1898
Москва
У меня появилась необходимость его изучения.
Первоначальное неглубокое знакомство приводит к неутешительному выводу об его относительной бесполезности - ложный ход в индустрии языков программирования. Возникает очевидный вопрос - под какие практические задачи, кроме экзотики типа задачи Эйнштейна, ничего в голову не приходит.
Очень хотелось бы узнать мнения других людей.

 Профиль  
                  
 
 Re: Логическое программирование на Проглог
Сообщение08.04.2006, 20:58 
Заслуженный участник


15/05/05
3445
USA
Абсолютно полезными можно считать десяток-полтора языков мэйнстрима, на которых пишут сотни тысяч специалистов. Остальные несколько сот, в т.ч. Пролог, можно считать относительно бесполезными.

Ложным ходом я бы его не стал называть, вердикт пока не вынесен. Ведь системы логического вывода из аксиом реализуются, в той или иной степени, в любой системе искусственного интеллекта. А Пролог - это "чистая" реализация логического программирования. Предназначался и применялся для исследований в области ИИ, в т.ч., понимания естественных языков. Эдинбургская реализация Пролога считалась эталоном для СЛВ. Мода на него, как и на ИИ в целом, прошла. Возродится ли - кто знает.
Кстати, один из моих коллег, Electrical Engineer, изучал в колледже Бейсик и Пролог. Правда на работе он программирует только на Basic.

А вот теперь и у Вас возникла необходимость его изучения...

 Профиль  
                  
 
 
Сообщение09.04.2006, 02:51 


25/01/06
102
Цитата:
Мода на него, как и на ИИ в целом, прошла


Мода на ИИ не прошла, просто вместо предмета всеобщего (обычно некомпетентного) восхищения ИИ теперь стал одной из многих прикладных частей Computer science. Например, программисты занятые ИИ - одни из наиболее оплачиваемых в индустрии компьютерных игр. Об использовании Пролога в прикладных системах я не слышал, но это не означает что он там не используется.

Конечно, Пролог сам по себе может быть в настоящий момент довольно бесполезным язком. Просто к его изучению надо подойти в контексте. Пролог это пример СЛВ (системы логического вывода) с backward inference, в то время как экспертные системы обычно используют forward inference. Если разные прикладные СЛВ изучать вкупе, то такие затраты времени могут себя вполне окупить в будущем.

 Профиль  
                  
 
 
Сообщение10.04.2006, 23:54 
Заслуженный участник
Аватара пользователя


07/03/06
1898
Москва
Спасибо ВСЕМ за ответы! Видимо диагноз относительной бесполезности оправдывается...

 Профиль  
                  
 
 
Сообщение04.05.2006, 01:44 


04/05/06
12
Yalta
Ну-ну, попробуйте это сказать на каком-нибудь из форумов, посвящённых Прологу - там вам убедительно докажут, что на Прологе можно делать абсолютно всё, совершенно отказавшись от обычных императивных языков :) На самом деле, высказывания о глобальности и бесполезности Пролога - это 2 крайности, между которыми находится истина. Мне пришлось с нуля изучать Пролог 5 лет назад, когда меня кинули это дело преподавать. Могу кое-что сказать по своему опыту. У Пролога действительно есть своя область практического применения. она не очень широкая, обобщённо её можно назвать решением переборных задач, имеющих
небольшое пространство поиска. Перечислю некоторые из практически ценных задач.
- Составление расписаний, например, учебных занятий на факультете, в школе и т.д. (мне за создание такой программы институтское начальство даже приплатило).
- Символьные аналитические вычисления - написать ядро пакета по типу Мэйпла на Прологе реально не составляет никакого труда - по крайней мере, базовые вещи (например, процедура для дифференцирования состоит просто в перечислении правил этого дифференцирования, например, diff(sin(F),X,cos(F)*DF) :- diff(F,X,DF), !.), причём у вычисление численных значений у сгенерированных символьных выражений тоже не требует никаких усилий.
- Естественно-языковые интерфейсы (на Прологе просто перечисляются правила грамматики и словарь, причём в самом естественном виде (семантический разрыв = 0), и при этом они уже являются програмой, готовой к запуску). Кстати, язык можно использовать не только естественный, но и любой формальный, например, эта вещь была бы очень полезна при разработке компиляторов - для создания "быстрого прототипа".
- СУБД произвольного типа для БД малого объёма.
- Про игры и головоломки уже говорилось ранее, сюда можно добавить программы для ведения диалога (например, чат-роботы).
Ну о вещах типа экспертных систем умолчу, поскольку не специалист по ИИ. В принципе, Пролог можно и не знать, и жить спокойно, т.к. все эти вещи можно запрограммировать и "обычным" путём (хотя и с затратой существенно бОльших усилий). Но когда уже его знаешь, становится очевидно, что некоторые задачи предназначены именно для Пролога - при их реализации программа, например, на Си, заняла бы 5 экранов, а на Прологе - 5 строчек. Кроме того, понимание концепции логич.программирования здорово помогает при работе с другими языками. Например, шаблонное метапрограммирование на C++ - это по сути один к одному написание Пролог-программ (правда, ортодоксальные проложники это понимать отказываются: http://progz.ru/forum/viewtopic.php?t=14742).

 Профиль  
                  
 
 
Сообщение04.05.2006, 06:50 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Тряхну стариной :)

Как я помню, Пролог задает как должна работать система перебора. Это его сила, но и его слабость. Поскольку новые исследования в этой области не могут быть использованы.

Мне представляется, Пролог -- одна из вех в развитие CS. Но мало кто программирует сегодня на Алголе-60 (а с каким трудом я отыскал описание!) -- хотя я не говорю про его современник Кобол (надо признать, глядя на C#/Java, что в них все-таки больше от Алгола, чем от Фортрана и Кобола. Может потому и жив Кобол -- в отличии от Кроноса -- что нет порожденных им языков-отцеубийц).

Декларативное программирование -- Святой Грааль CS. Это мечта, которая пока, увы, больше в стадии разработки, чем практического применения. Мне трудно представить себе систему бухгалтерского учета, написанную декларативно. А как было бы класно -- ввел закон о налогах, и половина ноши с плеч долой! все сама подсчитает... И сама же сидеть вместе с Ходорковским будет...

 Профиль  
                  
 
 
Сообщение04.05.2006, 12:35 
Заслуженный участник
Аватара пользователя


07/03/06
1898
Москва
Цитата:
Мне пришлось с нуля изучать Пролог 5 лет назад, когда меня кинули это дело преподавать.

У меня та же проблема...
Порекомендуйте примерный планчик, что в какой последовательности изучать, какие конкретно наглядные примеры использовать.
Ринулся я тут пузырьковый метод сортировки реализовать на Прологе - думал, думал :roll: , так и пришлось в учебное пособие заглядывать - до конца сам не смог.
Говорят, Пролог максимально приближен к человеческому мышлению, однако со своим мышлением я этой аналогии не просматриваю. :cry:

 Профиль  
                  
 
 
Сообщение07.05.2006, 02:29 


04/05/06
12
Yalta
Цитата:
Как я помню, Пролог задает как должна работать система перебора. Это его сила, но и его слабость. Поскольку новые исследования в этой области не могут быть использованы.
Ну почему же - вполне могут. Конечно, сам Пролог основан на поиске в глубину методом backward inference, но остальные методы поиска на нём вполне можно запрограммировать (многие даже достаточно просто)
Цитата:
А как было бы класно -- ввел закон о налогах, и половина ноши с плеч долой! все сама подсчитает
Наверное, когда-нибудь к этому всё придёт, никаких принципиальных препятствия для этого вроде не видно. Ведь написание законов - это тоже программирование (причём в основном как раз логическое. Кстати, создатели всяких теневых схем - это как раз аналоги хакеров-крякеров), и когда-нибудь формализация его постепенно дойдёт до степени возможности автоматизации.
Цитата:
Ринулся я тут пузырьковый метод сортировки реализовать на Прологе - думал, думал , так и пришлось в учебное пособие заглядывать - до конца сам не смог.
Говорят, Пролог максимально приближен к человеческому мышлению, однако со своим мышлением я этой аналогии не просматриваю.
Приближен - оно-то, конечно, так, но в то же время в Прологе имеются всякие методы повышения эффективности программ, в том числе и чисто процедурные по смыслу, применение которых значительно осложняет понимание, особенно если опыт программирования небольшой. Например, до всех нюансов применения отсечения (того, что обозначается воскл.знаком) я дошёл вовсе не на первом году изучения. Не говоря уже о студентах! Поэтому лучше осваивать помаленьку и постепенно. Что касается сортировки, то лучше начинать с медленной ("наивной") сортировки - у неё минимум процедурной семантики, т.е. программа почти чисто описательная. У всех остальных сортировок уже без процедурной семантики (т.е. осознания, что делаем вначале, а что потом, а не просто что истинно, а что ложно) не обойтись - наверное потому, что сортировка - это всё-таки алгоритм, и никуда от этого не деться.
Цитата:
Порекомендуйте примерный планчик, что в какой последовательности изучать, какие конкретно наглядные примеры использовать.
По поводу того, в какой последовательности изучать Пролог - тут, наверное, сколько людей, столько и мнений. Изложу своё. (Иногда заглядываю на прологовский форум http://progz.ru/forum/viewforum.php?f=10, там частенько обсуждаются вопросы его оптимального изучения и преподавания, но все они выглядят для меня какими-то слишком высокими материями. Наверное, для тех, у кого Пролог основной рабочий инструмент, а не дополнительный (как у меня), мир выглядит по-другому). Во-первых, заведите себе книжек (классикой являются Клоксин-Меллиш, Братко, и Стерлинг-Шапиро, все есть в инете): например, http://dstu2204.narod.ru/3sem/lp/bratko.cab, или посмотрите на http://progz.ru/forum/viewtopic.php?t=11193, на lib.org.by тоже кое-что есть. Мне в своё время книжка Братко здорово помогла. Изучение, по-моему, лучше начинать с чисто логических вещей, убрав всё процедурное (ввод-вывод, отсечение, динамическое добавление-удаление предложений и т.п.). Поначалу даже лучше и без рекурсии обойтись. Например, рассмотреть задачку типа построения таблиц истинности формул логики высказываний: на базе логических связок с заданными таблицами
'не'(0,1).
'не'(1,0).
'или'(0,0,0).
'или'(0,1,1).
'или'(1,0,1).
'или'(1,1,1).
и т.п. построить таблицу истинности при помощи заданной формулы, например,
'->'(X,Y,Result) :- 'не'(X,NotX), 'или'(NotX,Y,Result).
или помоделировать задачки из анализа логических схем (типа задаём сигналы на входе и смотрим, что будет на выходе или наоборот). Ещё пример - поиск команд в таблице чемпионата по какому-нибудь критерию (типа запросов на выборку в sql).
2. добавить рекурсию. Типичные задачи: программа "родственные отношения" (есть во всех книжках и в инете), программа поиска пути по карте каких-нибудь транспортных маршрутов или схеме метро (пока без нахождения пути, а просто найти ответ на вопрос: до каких пунктов можно с пересадками добраться из заданного).
3. рассмотреть понятие составного терма ("структуры"). Здесь примеры на символьную арифметику: дифференцирование, упрощение, раскрытие скобок и т.п.
4. Списки. Теперь можно добавлять нахождение пути по карте с занесением этого пути в список. Ну и всякие простые операции со списками: member, конкатенация, обращение, etc. Кстати задача Эйнштейна.
5. Численные расчёты: вычисление факториала, чисел Фибоначчи и т.п.
6. Основы процедурной семантики (программа "большой, тёмный" из книжки Братко), отсечение. Только самые простые и необходимые вещи типа добавления отсечения в вычисление факториала, чтобы не было переполнения стека. По опыту, студенты коммерческого вуза процедурную семантику не понимают даже после 1 семестра изучения (а многие - и вообще никогда), поэтому лучше их этим сильно не грузить - только самое необходимое.
7. Метод решения задач "поиск в пространстве состояний". Программа "обезьяна и банан". На эту тему могу дать учебный пример генератора расписаний занятий.
8. Форматированный вывод, файловый ввод-вывод.
9. Динамическое добавление-удаление предложений программы. "Самообучающийся факториал", динамическая СУБД.
10. Метапредикаты (not, =.. , call, functor, clause, etc.)
11. Предикаты высших порядков (bagof, setof, findall).
Ну по ходу процесса будет видно: возможно, что-то надо копать глубже, а что-то вообще опустить.
Наверное, параллельно надо проходить какие-то теоретические основы (например, минут по 10 в начале каждой лекции). По крайней мере, по-моему, обязательно следующее: логика высказываний - логика предикатов 1 порядка - клаузальная форма логики предикатов - клаузы Хорна, т.к. это лежит в основе логич. программирования.

 Профиль  
                  
 
 
Сообщение07.05.2006, 08:25 


25/01/06
102
Подскажите, в какой книге подробно описан механизм унификации? У меня была когда то такая книга по прологу, да сплыла. А кто автор - вспомнить не могу.

А еще - посоветуйте фриварный (не "гну"тый) пролог, со свободной лицензией типа zlib'а (да еще, желательно, с обвязкой для питона или с#). Если вообще такой существует, конечно...

(Кстати гнутый пролог последний раз обновлялся в 2000 году, из чего следует что пациент скорее все таки мертв, чем жив ;-) К нему есть обвязка для питона на SWIG, но я как то не фанат ни гну, ни swig...)

 Профиль  
                  
 
 
Сообщение07.05.2006, 11:31 
Аватара пользователя


21/10/05
100
Одинцово
Позвольте реплику неспециалисту по Прологу.
Вот нашел в своей библиотеке книжку А.Адаменко и А.Кучуков Логическое программирование и Visual Prolog. СПб, 2002. 990 стр. На СД диске дистрибутив Visual Prolog.
Из чего делаю вывод: раз продукт развивается, значит это кому то нужно :)
Сам купил эту книжку в надежде прочитать. Но так до сих пор и не получается :(

 Профиль  
                  
 
 
Сообщение07.05.2006, 18:31 
Заслуженный участник


15/05/05
3445
USA
Igor Borovikov писал(а):
Подскажите, в какой книге подробно описан механизм унификации?

Я лично осваивал по этой: "Чень Ч., Ли Р. Математическая логика и автоматическое доказательство теорем. Наука. 1983". Но в ней используется Лисп. Еще был такой сборник: "Логическое программирование: сборник статей, Агафонов В.Н. (ред.) Мир, 1988".

 Профиль  
                  
 
 
Сообщение07.05.2006, 18:49 
Заслуженный участник


15/05/05
3445
USA
sexstant писал(а):
Позвольте реплику неспециалисту по Прологу... раз продукт развивается, значит это кому то нужно :)

Это не противоречит исходной гипотезе топика об "относительной бесполезности" Пролога.
Другой пример: помнит ли еще кто-либо, кроме "старослужащих", язык Форт? А я вот получил письмо от рекрутера о возможной работе, где требуется "C, C++ & Forth".

 Профиль  
                  
 
 
Сообщение07.05.2006, 20:17 


25/01/06
102
Yuri Gendelman: Спасибо за ссылки на книги.

 Профиль  
                  
 
 
Сообщение09.05.2006, 00:44 


04/05/06
12
Yalta
Цитата:
А еще - посоветуйте фриварный (не "гну"тый) пролог, со свободной
Из "эдинбургских", соответствующих ISO-стандарту, самый популярный сейчас, похоже, swi-prolog (www.swi-prolog.org). Распространяется по GPL. API у него встроен только для C/C++, остальные интерфейсы (в т.ч. и под # и питон) доступны как отдельные пакеты (see doc).
Со многими API знаю ещё Amzi! Prolog+Logic Server (http://amzi.com), но он не freeware (раньше был freeware for personal use, но сейчас, похоже, уже нет). Кстати, его сайт сильно хвастается, в каких крутых областях этот пролог применяется.

 Профиль  
                  
 
 
Сообщение09.05.2006, 04:57 


25/01/06
102
wowec - спасибо!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group