Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Prolog и его современные диалекты (http://forum.oszone.net/showthread.php?t=244241)

lxa85 09-10-2012 12:39 2001988

Prolog и его современные диалекты
 
Здравствуйте.
Хотелось бы услышать мнение о языке Prolog.
Читана различная литература, сайты, накоплена (но не прочитана от и до) документация.
Найден современный диалект Mercury.
Вопросы простые, но играют решающие роли:
В чем прелесть языка Prolog?
Какую идею он несет в себе, чтобы его можно было попробовать изучить?
Другими словами, как надо построить свое мышление и рассуждение, чтобы создавать эффективные, красивые и элегантные программы на Prolog'е?
Где та область, где он работает, а другие лишь пытаются работать?

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

Iska 09-10-2012 18:37 2002199

Цитата:

Цитата lxa85
равно как и о предпосылках создания этой темы. »

Может, с этого и начать?

lxa85 10-10-2012 11:48 2002617

Постановили в институте изучение новой дисциплины -- языки инженерии знаний.
Предмет новый, подробных методических материалов нет.
Поиск в гуле привел к следующим результатам:
Пролог, Лисп. Как основные языки описания знаний и их инженерии -- т.е. получение новых знаний.
Проще говоря -- у нас есть некоторый набор знаний (логических условий), к нему надо задать вопрос и получить ответ.
Наиболее часто приводимые примеры -- генеалогическое дерево, задача Эйнштейна, игра "Жизнь".
Про lisp мне было известно, что что работа со списками, применяется в автокаде, да и судя по постам на хабре -- вещь лежащая в основе языков программирования. (Т.е. глубже обычного)
Пролог -- язык логического программирования. Собственно и все.
Т.к. это не объектно-оринетированное программирование, а функциональное, то и хочется понять (схемку али что) что это за зверь?
Т.е. возратясь к названию -- программирование логики. Но логику я могу запрограммировать и на паскале допустим. В чем юмор то?
Часто пролог называют -- уделом университета и университетской шуткой. Я пока склонен согласиться, т.к. я не видел рабочих программ на прологе. (Собственно, да, а много ли чего я не видел?) Если Visual Prolog продают, значит кто то его покупает.
Допустим пролог разрабатывали как язык автоматического доказательства теорем. Современный его диалект, оптимизированный под современную архитектуру -- Mercury. Он несколько оптимизирует код и позволяет получать более быстрые программы.
Не найдя простого и понятного ответа, решил спросить на форуме. Кто работал с этим языком и что в нем такого замечательного?

Я не понимаю что, как и к чему должны привести лекции, что должны узнать и понять студенты после изучения языка Prolog?
В этом плане мне гораздо больше интересен lisp. На нем хоть можно что-то создавать. И он впоследствии более плавно перейдет в дисциплину искусственного интеллекта.

Сумбурно так получилось.

XPEHOMETP 10-10-2012 12:19 2002634

Цитата:

Цитата lxa85
Т.к. это не объектно-оринетированное программирование, а функциональное, то и хочется понять (схемку али что) что это за зверь? »

Фишка в том, что старичок Лисп годится для любого типа программирования. Вообще. Ну, кроме если в машинных кодах. Надо только заранее все соответствующим образом на нем исходно описать. Хотите объектно-ориентированное программирование - сначала опишите классы, потом программируйте. Пример - объектно-ориентированный язык Smalltalk, из которого уши Лиспа просто торчат. Соответственно, описываете на Лиспе все что нужно для функционального программирования - получите желаемое. Лисп, он может все, и он способен к мимикрии и перерождению в другие языки. Более специализированные. Освоите Лисп - сможете абсолютно все. Я вот не освоил, пока что... Но потенциал осознал, зубы потихоньку точу...

И еще немного, на счет Лиспа. Да, я понял, что на нем можно наворочать очень многое, если при этом правильно прописать используемые основные понятия. Но само это прописывание... настолько муторное! Просто с души воротит. Не знает ли кто языка, где это проще делается?

lxa85 10-10-2012 13:11 2002658

XPEHOMETP, вооот. Вот про lisp это все трактуется, говорится и пересказывается.
А как быть с прологом то? :)

XPEHOMETP 11-10-2012 12:26 2003339

А я не знаю, как быть с Прологом, он мне как-то до лампочки был, без надобности... Даже не смотрел. То есть смотрел по диагонали, не понял для себя ни малейшей выгоды и значимости. А вот Лисп показался весьма перспективным.

AMDBulldozer 11-10-2012 13:57 2003402

Цитата:

Цитата lxa85
Т.к. это не объектно-оринетированное программирование, а функциональное, то и хочется понять (схемку али что) что это за зверь? »

Язык функционального программирования, это как раз не Prolog, а Lisp. Prolog - это язык предикатов. Его основное отличие от классических языков программирования состоит в том, что в нем не описывается последовательность действий необходимых для получения результата. Во времена перфокарт любили приводить пример, что в идеале (на практике недостижимом) колоду карт с Prolog-программой можно перетасовать и после этого она должна продолжать работать.
Это было теоретически возможно потому, что область видимости переменных ограничивалась одним предикатом (считайте - одним оператором). Программа на Прологе не содержит вообще никаких частей, описывающих процесс достижения результата. Никаких алгоритмов, никаких функций. Только набор логических утверждений. И логический запрос (goal - цель), ответ на который программа должна дать сама, имея своём распоряжении только набор утверждений из которых и состоит весь текст программы.

Я как-то набросал на Prolog'е программу для игры в крестики-нолики на бесконечной доске (известная игра, чем-то напоминающая японскую "Го") и удивился, что она сразу стала неплохо играть, причем добавление каждого следующего правила (предиката), которым программа должна была руководствоваться рассчитывая очередной ход, существенно улучшало её игру. Правда, одновременно с этим в геометрической прогрессии росло и время на расчет каждого хода...

Понятно, что для написания подобной программы на любом другом языке, включая Lisp, потребовалось бы в несколько раз больше времени (правда и работала бы она на два порядка быстрее).

Iska 13-10-2012 06:17 2004477

Цитата:

Цитата XPEHOMETP
Фишка в том, что старичок Лисп годится для любого типа программирования. Вообще. Ну, кроме если в машинных кодах. Надо только заранее все соответствующим образом на нем исходно описать.

Освоите Лисп - сможете абсолютно все.»

Наверное, именно потому Ленат, «впечатлённый» тем, как его программа работает на LISP'е, был вынужден разработать новый язык программирования. Каждый язык имеет свою, достаточно ограниченную сферу применения. И LISP — не исключение.

Цитата:

Цитата AMDBulldozer
Понятно, что для написания подобной программы на любом другом языке, включая Lisp, потребовалось бы в несколько раз больше времени (правда и работала бы она на два порядка быстрее). »

Не думаю, что быстрее.

lxa85, отправил письмо в личку.


Время: 19:15.

Время: 19:15.
© OSzone.net 2001-