问题标签 [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.
logic-programming - 为什么在 pyDatalog 中创建关系似乎给了我错误的答案?
我是 Datalog 概念的新手,我正在通过 pyDatalog 探索它。我正在尝试使用单位测量转换器。因此,例如,考虑到一米有多少英寸的事实,它应该能够告诉我一英寸有多少米。到目前为止,这是我的代码:
Wny 程序不能正确地将英寸转换为米吗?应该看到一米有 39.37 英寸,并应用倒数规则换算另一种方式。所以它应该打印出 0.0234,但它实际上打印出
clojure - core.logic matche,defne 模式匹配结构使用什么语法?
一些 core.logic 构造(matcha
, matche
, matchu
, defne
, fne
)使用模式匹配表达式作为主体,可以使用如下:
(来自Logic-Starter wiki 的示例)
但是我在 core.logic 文档中找不到模式匹配的语法规范。这是什么语法?也许我可以在一些 minikanren 文档或书籍中找到它?
- 带前缀和不带前缀的匹配变量有什么区别
?
? .
除了带有(类似于&
clojure)的列表之外,还有其他破坏性构造吗?- 将
[_ _]
仅匹配具有两个元素的序列吗? - 可以破坏地图吗?
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
的值盒子,所以我的问题是:是否有一个“魔术”让它工作,以便我以某种方式获得X
in的所有可能值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
该匹配的所有实例。
prolog - 添加动态数量的数字
取一个给定的数据库,例如
计算超过 50 乘以 100 的输入量,限制为仅采用 /1 输入。例如
我尝试了以下序言代码来模仿计算功能,但未成功:
I+100 没有按我的意愿工作。
prolog - 使用不纯原语的 Prolog 谓词的纯度
我知道var/1
,nonvar/1
并且!/0
是不纯的原语,但是它们的使用是否会使每个使用它们的程序不纯?
我写了下面的谓词plus/3
,它的行为就好像它是纯的,或者至少是我所声称的。谓词是说明性的,并非旨在高效。
我有两个问题:
- 上面的谓词
plus/3
真的是纯的吗? - 一般来说,你如何证明一个特定的关系具有逻辑纯度?
这个问题在关于这个答案的讨论之后。
clojure - 使用约束逻辑对配方和可用成分进行建模
想象一下,我的厨房里有许多不同菜肴的食谱和一个装有各种食材的储藏室。我想构建一个模型core.logic
,使我能够回答以下问题:对于给定的一组成分(即现在我储藏室中的那些),我可以制作哪些食谱?
食谱有些灵活,我需要能够对此进行建模。稍后我想为它们添加数量,但为了开始,让我们暂时忽略它。
我可以看到如何为储藏室建模:
食谱有一个名称和一个成分列表,可以是可选的或以各种方式组合。有n 个食谱。例如,食谱可能(非正式地)如下所示:
我正在努力解决如何用core.logic
. (注意,上面的文字只是说明性的,并不是机器可读的。)
我想查询看起来像这样:
这将返回以下结果(给定上面的储藏室定义):
我的问题是:如何对这些食谱进行建模,以便我可以对食谱和储藏室编写查询,以列出给定储藏室当前内容的可能食谱的名称?
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)。
prolog - Prolog 和 miniKanren 在逻辑编程方面的主要技术区别是什么?
当我想阅读逻辑编程时,我总是会偶然发现两种“主要”方法:
- miniKanren是The Reasoned Schemer中引入的一种迷你语言,由于core.logic而在当时很流行。
- Prolog,第一个“大”逻辑编程语言。
我现在感兴趣的是:两者之间的主要技术差异是什么?它们在方法和实现上是否非常相似,或者它们采用完全不同的逻辑编程方法?它们来自数学的哪些分支,理论基础是什么?
prolog - 在 Prolog 中枚举二叉树
我正在尝试创建 Prolog 规则以在 Prolog 中以列表形式枚举“二叉树”。我是 Prolog 的新手。
具有 0 个节点的树是一个空列表:
一棵有 1 个节点的树是:
具有 2 个节点的树有 2 种可能性:
等等。
这是我的规则:
对 0 和 1 的查询显然有效。对于 N=2,它会打印一种可能性,但在我输入分号以获得另一种可能性后会给出错误。N>2 的查询直接报错。错误总是一样的:
我在一些网站上读到了这个错误,但我不知道是什么导致了这个错误。
提前感谢您的帮助。
recursion - Prolog中两个排列(循环)的乘积
我想在 Prolog(循环形式)中找到两个排列的乘积,但我遇到了问题(主要是因为我什至无法想象它会是什么样子)。
我想过将这些排列更改为另一种表示,但我不确定哪种方式是正确的。
所以请帮助我,非常感谢任何提示。
%permutationproduct(+P1,+P2,-结果)
编辑:在排列的产品下,我的意思是:CLICK(但我们的输入是循环符号,这使得项目更加困难)。输入是 2 个排列 (P1,P2),预期结果是第三个参数 - 排列的乘积。
我实际上正在做一个更大的项目,这只是其中的一部分,但正如我所提到的,我什至无法开始它,因为我无法想象它。