2009-10-03 2 views
7

Каждый язык, который используется, обычно используется для его преимуществ.Каковы преимущества использования Prolog над другими языками?

В чем преимущества Prolog?

Каковы общие ситуации/категории проблем, где можно использовать Prolog более эффективно, чем любой другой язык?

ответ

3

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

Если ваш вопрос более конкретно про пролог против наиболее часто встречающихся языков ОО, я бы сказал, что вы действительно сравниваете яблоки с апельсинами - «преимущество» (например, это) - это просто другой способ мышления о мир, а иногда и изменение того, как вы задаете вопрос, является лучшим инструментом для решения проблемы.

+0

по сравнению с C/C++ в частности ... решение проблемы с четырьмя королями, например, так проще в Prolog (что я только что узнал). Почему C vs Prolog как яблоки и апельсины? Не может ли каждая программа C быть преобразована в Prolog и наоборот? – Lazer

+2

Это может (теоретически - то есть я не могу придумать контр-пример), но только потому, что вы можете это не значит, что вам нужно. Посмотрите на это так: если бы он был * правильным выбором большую часть времени, тогда было бы намного больше программистов пролога, чем есть. – annakata

+0

@annakata да, согласен. но я не знаю, почему (меньше программистов Prolog) – Lazer

3

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

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

Конечно, в реальном мире ключевые части вашей программы могут извлечь выгоду из Prolog, но многие другие вещи лучше обрабатываются с использованием другого языка. Вот почему многие компиляторы Prolog могут взаимодействовать, например, с C.

1

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

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

Это также хороший язык для изучения решения логических головоломок ;-)

+0

да, я просто решил проблему с восемью королевами, и это было так просто ... я не знаю, почему мы чаще не используем Prolog. – Lazer

+3

@eSKay - два больших, A). неправильный инструмент для синдрома работы, потому что большинство бизнес-проблем оказываются больше связанными с манипуляциями с объектами, и, следовательно, ОО является очень распространенной и успешной парадигмой Б). пролог невероятно сложно заглянуть и нечестивый кошмар для отладки – annakata

2

Один из лучших времен, чтобы использовать Пролог, когда у вас есть проблемы подходят для решения с backtracking. И именно тогда у вас есть много возможных решений проблемы, и, возможно, вы хотите заказать их включение/исключение в зависимости от некоторого контекста. Это говорит о большой двусмысленности ... как в обработке естественного языка.

Это было бы очень аккуратно, чтобы написать все потенциальные ответы, как предложения Prolog. С императивным языком все, что я думаю, что вы действительно можете сделать, это написать гигантское (действительно гигантское) заявление CASE, которое не слишком забавно.

2

Вещи, которые присущи Пролог: соответствие

  • узор!
  • все, что связано с первым поиском глубины.(В Java, если вы хотите сделать DFS, вы можете осуществить это с помощью шаблона посетителя или сделать (на самом деле гигантский) СЛУЧАЙ
  • объединительного
  • ??

Пол Грэм, является Лисп но тем не менее он утверждает, что Prolog действительно хорош для 2% проблем, я сам люблю сломать этот 2% вниз и понять, как он придумал такой номер.

Его аргумент за «лучшие» языки «меньше кода, больше мощности». Prolog определенно «меньше кода», и если вы пойдете на его последние вкусы (набрал), вы получите больше энергии. Единственное, что беспокоило меня при использовании Pr olog - тот факт, что у меня нет случайного доступа в списках (без массивов).

2

Prolog - язык программирования очень высокого уровня. Аналогия может быть (Пролог: C) как (C: Ассемблер)

Почему так не используется? Я думаю, что это связано с используемыми нами машинами; Они основаны на машинах для туринга. C может быть скомпилирован в байтовый код автоматически, но Prolog скомпилирован для запуска на эмуляции абстрактной машины Уоррена, таким образом, это не так эффективно.

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

+0

Можете ли вы привести пример проблемы, которая не разрешима в Prolog? – alexraasch

+0

@alexraasch Prolog завершен, поэтому он способен решать разрешимые. Однако, если вы попытаетесь решить, например, система уравнений с проломом вашего кода была бы обязательной. –

1

Я программировал (для удовольствия) в течение года с помощью Swi-Prolog. Я думаю, что одним из преимуществ Prolog является то, что Prolog не имеет побочных эффектов: Prolog - это язык, который не подходит для переменных (локальных или членов класса), и это заставляет программиста не использовать переменные. Объекты Prolog не имеют состояния, типа. Я думаю. Я пишу командную строку Prolog (без GUI, за исключением нескольких тестов XPCE): это как поезд на треке.

Смежные вопросы