2011-01-16 6 views
14

Есть ли какой-либо более новый язык, чем Prolog, специализированный для логического программирования?Более новый язык программирования, чем Prolog для логического программирования

+1

В Википедии есть список языков логического программирования: https://en.wikipedia.org/wiki/Category:Logic_programming_languages ​​ –

ответ

9

Mercury приятный и современный, и напоминает пролог.

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

+1

Я бы также предложил Mercury как отличный логический язык программирования. Также обратите внимание, что хотя синтаксис Mercury может выглядеть как Prolog, он больше похож на то, что вы программируете в Haskell из-за сильной системы типов. Более того, если вам нужны некоторые типичные функции Prolog, такие как логические переменные, Mercury не поддерживает их. На практике их избегать будет сделать вашу программу более удобной :-). Отказ от ответственности: Я работаю над проектом Mercury, наблюдения за ремонтопригодностью кода являются субъективными и анекдотическими. Другие комментарии объективны. –

+1

Отсутствие логических переменных кажется большим недостатком. Разве это не очень важный аспект пролога/LP? – ib84

5

Существует довольно многообещающий язык программирования функциональной логики, называемый Curry. Несмотря на свою новизну, к Карри должно быть легко привыкнуть, если вы уже знаете Haskell и Prolog, поскольку на это прямо повлияли эти два языка.

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

1

Oz/Mozart - это язык программирования с несколькими парадигмами, который поддерживает логическое программирование как одну из его функций. Я никогда не использовал его, поэтому не могу сказать, хорошо ли это. Это, конечно, кажется интересным, хотя.

Отказ от ответственности: Я работаю над проектом Mercury и выбираю Mercury в выборе между Oz/Mozart и Mercury.

+0

Пожалуйста, исправьте ссылку на Oz/Mozart. – nbro

2

Не забывайте, что Prolog - это хост для многих новых расширений, которые могут считаться собственными языками. В частности, такие языки ограничений, как CLP (R), CLP (Q), CLP (FD). Более общие расширения, такие как CHR, но и множество типизированных подходов.

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

3

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