Erlang是一种约束逻辑编程语言吗?

时间:2011-03-22 03:02:51

标签: erlang prolog constraint-programming

由于Erlang基于Prolog,这是否意味着Erlang是一种约束逻辑语言? Erlang是否有Prolog的构建块:事实,规则和查询

4 个答案:

答案 0 :(得分:26)

没有

Erlang的语法与Prolog的语法非常相似,但语义却截然不同。 Erlang的早期版本是使用Prolog编写的,但今天的Erlang不再有意义地被称为“基于Prolog”。

Erlang不包括经常用于逻辑编程的Prolog的回溯或其他功能。您当然可以在其他语言上实现Prolog,而Erlang比其他语言更容易选择。这可以在Robert Virding的“Erlog​​”项目中看到:

https://github.com/rvirding/erlog

答案 1 :(得分:6)

Erlang的第一个版本不是用Prolog编写的,它是用一种承诺选择的逻辑编程语言编写的。这些语言降低了Prolog的回溯,因此名称“承诺选择”意味着一旦做出选择,就不可能回溯并尝试另一种。这样做是为了简化逻辑编程的形式并发。查看它的另一种方法是并发进程将约束应用于变量,但是作为逻辑变量并因此不可重新分配这些是连续约束而不是值的变化。约束可以为变量分配一个部分值,包含稍后将分配的另一个变量。这是Erlang的基础模型。约束逻辑编程倾向于用于版本,其中约束还可以包括关于具有预期数值的变量的可能范围的数学陈述。

Erlang的语法显示了它的逻辑编程遗产,但重要的是理解它通过提交的选择逻辑编程语言选择了这一点,这些编程语言是从Prolog中提取的,而不是直接从Prolog中提取的。虽然在20世纪80年代设计了几种忠诚的选择逻辑编程语言,但他们无法摆脱Prolog的阴影,并被与日本第五代失败计划的失败联系在一起,也被竞争的开发团队所挫败。微小的差异因此没有建立标准。

Erlang的开发人员引入了一种语法糖,它为代码提供了更多功能性的外观,并做出了营销决策,将其作为一种功能而非逻辑编程语言推广,这使其不会受到第五代解雇后的拖累。逻辑编程。

答案 2 :(得分:0)

简而言之,不是没有:)它没有那些构建块。它的重点是并发,并行编程,分布式应用程序和容错(同时是一种功能性,严格的声明性语言)。

答案 3 :(得分:0)

您可以使用Erlang中的列表推导功能作为在约束编程风格中实现的一种方式。

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

您可以选择放置从列表中获取的元素的生成器(A&lt; - lists:seq(0,1))和约束(A&gt; B)。

我最近解决了下面链接的问题。如果你正确地放置了约束,你会在瞬间获得答案。

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