问题标签 [logic-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
152 浏览

haskell - 哪个是给定语句的正确程序?

问题陈述:

找出所有边都为整数且所有边等于或小于 10 的周长为 24 的直角三角形。

以下两个解决方案中的哪个解决方案正确解释了问题并给出了正确的答案?

如果第一个解决方案不正确,那么在类似情况下如何避免此类编程错误?

第一个解决方案:

第二种解决方案:

0 投票
4 回答
1036 浏览

prolog - Prolog - 什么样的句子不能表达

我想知道你不能用 Prolog 表达什么样的句子?我一直在研究逻辑编程,并了解到与 Prolog 所基于的明确子句逻辑(Horn 子句)相比,一阶逻辑更具表现力。这对我来说是一个很难理解的话题。

因此,例如,可以表达以下句子:

如果有,还有其他不能表达的句子吗?如果不是,为什么?

0 投票
1 回答
860 浏览

functional-programming - 是否有纯粹的声明性通用编程语言?

我一直在研究声明性语言,似乎声明性只是逻辑和函数语言的总称。还是我错了?是否有任何通用的声明性编程语言不能归类为功能或逻辑(al),而只是“声明性”?

0 投票
1 回答
316 浏览

clojure - 使用 core.logic 列出唯一的 DAG 父级

这是一个(希望如此)简单的逻辑程序,我已经坚持了一段时间。

我有一个由 core.logic 中的边关系表示的 DAG,在生成父节点列表时,当我在图中有“菱形”时会得到重复(我不是在谈论循环)。

在这种情况下,有什么方法可以生成不同的父母列表(通过重写 parento 或类似方法)?

我想得到 (:b :c :a) 并且我想在 run* 语句中执行它(即将结果包装在一个集合中不是我的目标)。

此外,将“^:tabled”添加到 parento 似乎可以解决问题,但我不想要 tabled 引入的记忆。

0 投票
0 回答
365 浏览

python - Python中重写规则引擎的例子?

Python 生态系统中是否有任何现有项目以类似于 Mathematica 或 Maude 的方式使用重写/生产/转换规则?

请注意,我指的是逻辑编程概念,而不是 Web 服务器概念。

0 投票
2 回答
1755 浏览

prolog - Prolog:失败驱动的循环

我使用以下失败驱动循环来列出所有内容而不使用分号。

在查询模式下,我得到了预期

如何将这些数字插入列表而不是将它们写入屏幕?我无法在内部处理这个问题,someGoal因为回溯似乎是隐含的。

0 投票
1 回答
367 浏览

programming-languages - 基于列表的树的统一算法

我需要一个统一算法来处理以下情况。

我的表达式树中的每个节点都有一个列表(关联)或一组(关联和交换)子级。我想获得与特定模式的所有可能匹配。

这是一个例子。假设我们正在处理矩阵,因此 + 是可交换的, * 是不可交换的

表达:A + B*C*D + E

或者:Add(A, Mul(B, C, D), E)

图案:X + Y*Z

我看到两场比赛

问题:是否有任何标准算法可以处理这个问题?

0 投票
1 回答
948 浏览

prolog - Prolog:摆脱递归辅助谓词

所以我试图通过直接在 split 中使用排序库谓词来摆脱包装子句。split 所做的只是从如下所示的列表中生成一个数字列表: [1:2,3:2,4:6] ---split--> [1,2,3,2,4,6 ]。但是生成的列表包含重复项,我不希望这样,所以我使用包装器来组合拆分和排序,然后生成所需的结果:[1,2,3,4,6]。

我真的很想摆脱包装器,只在拆分中使用排序,但是我不断收到“错误:排序/2:参数没有充分实例化。” 有任何想法吗?谢谢 :)

0 投票
3 回答
2811 浏览

prolog - 寻找序言解释器

我是 prolog 的新手,想尝试一些逻辑程序,我正在寻找一个不错的 prolog 解释器。有什么建议吗?

0 投票
4 回答
3020 浏览

haskell - Haskell 的类型系统和逻辑编程——如何将 Prolog 程序移植到类型级别

我试图理解逻辑编程语言(在我的例子中是 Prolog)和 Haskell 的类型系统之间的关系。

我知道根据关系使用统一和变量来查找值(或类型,在 Haskell 的类型系统中)。为了更好地理解它们之间的异同,我尝试在 Haskell 的类型级别重写一些简单的 prolog 程序,但是我在某些部分遇到了麻烦。

首先,我重写了这个简单的 prolog 程序:

作为:

它工作正常,但我无法用这个 Prolog 扩展它:

我尝试的是这样的:

此代码的问题是最后两个实例导致fundep 冲突。我可以理解为什么,但在我看来这不应该是一个问题,因为它们的保护部分(或者不管它叫什么,我的意思是(Greaterthan a b c) =>部分)是不同的,所以最后两个实例声明中a的 s 和bs 实际上是不同的价值观,没有冲突。


我试图重写的另一个程序是:

(顺便说一句,示例来自Learn Prolog Now书)

我在最后一行收到“重复实例”错误。我认为这是一个类似的问题,即使我有不同的防护部件,我也会出错,因为身体部位(我的意思是Descend a b部件)是相同的。

因此,如果可能的话,我正在寻找将 Prolog 程序移植到 Haskell 类型级别的方法。任何帮助将不胜感激。

编辑:

Ed'ka 的解决方案有效,但方式完全不同。我仍在尝试了解我们何时可以在类型系统中运行 Prolog 程序,何时/为什么我们需要编写不同的算法以使其工作(如在 Ed'ka 的解决方案中),以及何时/为什么没有办法在 Haskell 的类型系统中实现一个程序。

也许我可以在阅读“Fun With Functional Dependencies”之后找到一些关于此的提示。