问题标签 [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 投票
1 回答
304 浏览

logic-programming - 为什么在 pyDatalog 中创建关系似乎给了我错误的答案?

我是 Datalog 概念的新手,我正在通过 pyDatalog 探索它。我正在尝试使用单位测量转换器。因此,例如,考虑到一米有多少英寸的事实,它应该能够告诉我一英寸有多少米。到目前为止,这是我的代码:

Wny 程序不能正确地将英寸转换为米吗?应该看到一米有 39.37 英寸,并应用倒数规则换算另一种方式。所以它应该打印出 0.0234,但它实际上打印出

0 投票
1 回答
569 浏览

clojure - core.logic matche,defne 模式匹配结构使用什么语法?

一些 core.logic 构造(matcha, matche, matchu, defne, fne)使用模式匹配表达式作为主体,可以使用如下:

(来自Logic-Starter wiki 的示例)

但是我在 core.logic 文档中找不到模式匹配的语法规范。这是什么语法?也许我可以在一些 minikanren 文档或书籍中找到它?

  • 带前缀和不带前缀的匹配变量有什么区别?
  • .除了带有(类似于&clojure)的列表之外,还有其他破坏性构造吗?
  • [_ _]仅匹配具有两个元素的序列吗?
  • 可以破坏地图吗?
0 投票
1 回答
1030 浏览

scala - 使用“Prolog in Scala”查找可用的类型类实例

考虑到https://speakerdeck.com/folone/theres-a-prolog-in-your-scala,我想“滥用”Scala 类型系统来查找所有CanBuildFrom符合给定条件的 eg 实例。Prolog 风格,我将评估以下伪代码行中的内容:

即运行时将查找Src满足语句的所有值can_build_from(Src, int, list[int])

现在,我知道 Scala 隐式查找系统所在的原始约束/逻辑编程环境并不打算用于此类技巧,并且不能“返回”超过一个找到Src的值盒子,所以我的问题是:是否有一个“魔术”让它工作,以便我以某种方式获得Xin的所有可能值CanBuildFrom[X, Int, List[Int]]

附加示例:

现在我想查询CanFoo[X, String]并返回X ∈ [Int, Double, Boolean],或者CanFoo[Int, X]返回X ∈ [String, Symbol]

或者,CanFoo[X, String]将返回List(canFooIntString, canFooDblString, canFooBoolString),即CanFoo该匹配的所有实例。

0 投票
1 回答
36 浏览

prolog - 添加动态数量的数字

取一个给定的数据库,例如

计算超过 50 乘以 100 的输入量,限制为仅采用 /1 输入。例如

我尝试了以下序言代码来模仿计算功能,但未成功:

I+100 没有按我的意愿工作。

0 投票
2 回答
443 浏览

prolog - 使用不纯原语的 Prolog 谓词的纯度

我知道var/1nonvar/1并且!/0是不纯的原语,但是它们的使用是否会使每个使用它们的程序不纯?

我写了下面的谓词plus/3,它的行为就好像它是纯的,或者至少是我所声称的。谓词是说明性的,并非旨在高效。

我有两个问题:

  1. 上面的谓词plus/3真的是纯的吗?
  2. 一般来说,你如何证明一个特定的关系具有逻辑纯度?

这个问题在关于这个答案的讨论之后。

0 投票
1 回答
150 浏览

clojure - 使用约束逻辑对配方和可用成分进行建模

想象一下,我的厨房里有许多不同菜肴的食谱和一个装有各种食材的储藏室。我想构建一个模型core.logic,使我能够回答以下问题:对于给定的一组成分(即现在我储藏室中的那些),我可以制作哪些食谱?

食谱有些灵活,我需要能够对此进行建模。稍后我想为它们添加数量,但为了开始,让我们暂时忽略它。

我可以看到如何为储藏室建模:

食谱有一个名称和一个成分列表,可以是可选的或以各种方式组合。有n 个食谱。例如,食谱可能(非正式地)如下所示:

我正在努力解决如何用core.logic. (注意,上面的文字只是说明性的,并不是机器可读的。)

我想查询看起来像这样:

这将返回以下结果(给定上面的储藏室定义):

我的问题是:如何对这些食谱进行建模,以便我可以对食谱和储藏室编写查询,以列出给定储藏室当前内容的可能食谱的名称?

0 投票
4 回答
464 浏览

prolog - Prolog:枚举可数无限结果的所有元素

是否有任何 prolog 实现能够枚举可数无限结果的所有元素?

让我们考虑枚举所有自然数对。如果我们按 {(0,0), (0,1), (1,0), (0,2), (1,1), (2,0), ...} 的顺序枚举对,我们可以枚举所有对。但是,如果我们按照以下 GNU prolog 程序的顺序 {(0,0), (0,1), (0,2), (0,3) ...} 枚举对,我们永远不会达到诸如 ( 1,1)。

0 投票
2 回答
23158 浏览

prolog - Prolog 和 miniKanren 在逻辑编程方面的主要技术区别是什么?

当我想阅读逻辑编程时,我总是会偶然发现两种“主要”方法:

  • miniKanren是The Reasoned Schemer中引入的一种迷你语言,由于core.logic而在当时很流行。
  • Prolog,第一个“大”逻辑编程语言。

我现在感兴趣的是:两者之间的主要技术差异是什么?它们在方法和实现上是否非常相似,或者它们采用完全不同的逻辑编程方法?它们来自数学的哪些分支,理论基础是什么?

0 投票
2 回答
662 浏览

prolog - 在 Prolog 中枚举二叉树

我正在尝试创建 Prolog 规则以在 Prolog 中以列表形式枚举“二叉树”。我是 Prolog 的新手。

具有 0 个节点的树是一个空列表:

一棵有 1 个节点的树是:

具有 2 个节点的树有 2 种可能性:

等等。

这是我的规则:

对 0 和 1 的查询显然有效。对于 N=2,它会打印一种可能性,但在我输入分号以获得另一种可能性后会给出错误。N>2 的查询直接报错。错误总是一样的:

我在一些网站上读到了这个错误,但我不知道是什么导致了这个错误。

提前感谢您的帮助。

0 投票
0 回答
117 浏览

recursion - Prolog中两个排列(循环)的乘积

我想在 Prolog(循环形式)中找到两个排列的乘积,但我遇到了问题(主要是因为我什至无法想象它会是什么样子)。

我想过将这些排列更改为另一种表示,但我不确定哪种方式是正确的。

所以请帮助我,非常感谢任何提示。

%permutationproduct(+P1,+P2,-结果)

编辑:在排列的产品下,我的意思是:CLICK(但我们的输入是循环符号,这使得项目更加困难)。输入是 2 个排列 (P1,P2),预期结果是第三个参数 - 排列的乘积。

我实际上正在做一个更大的项目,这只是其中的一部分,但正如我所提到的,我什至无法开始它,因为我无法想象它。