Является ли Erlang языком программирования Constraint-Logic? - PullRequest
17 голосов
/ 22 марта 2011

Поскольку Erlang основан на Прологе, означает ли это, что Erlang является языком логики ограничений?
Есть ли у Erlang строительные блоки Пролога: Факты, правила и запросы

Ответы [ 4 ]

26 голосов
/ 22 марта 2011

Нет.

Синтаксис Эрланга очень похож на синтаксис Пролога, но семантика сильно отличается.Ранняя версия Erlang была написана с использованием Prolog, но нельзя сказать, что сегодняшний Erlang больше не имеет смысла как «основанный на Prolog».

Erlang не включает в себя откат или другие функции Prolog, регулярно используемые для логического программирования.Конечно, вы можете реализовать Prolog на других языках, и Erlang для этого проще, чем некоторые другие.Это можно увидеть в проекте "Erlog" Роберта Вирдинга:

https://github.com/rvirding/erlog

6 голосов
/ 28 января 2013

Да.

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

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

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

0 голосов
/ 13 апреля 2012

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

% Produce the tuple {1, 0}
%
constraint_test() -> [ {A, B} ||
  A <- lists:seq(0, 1),
  B <- lists:seq(0, 1),
  A > B].

Вы можете альтернативно разместить генераторы элементов, взятых из списков (A <- lists: seq (0, 1)) и ограничения (A> B).

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

http://www.geocaching.com/seek/cache_details.aspx?guid=a8605431-53b5-4c2c-97fb-d42ee299b167

0 голосов
/ 22 марта 2011

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

...