问题标签 [minikanren]

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 投票
0 回答
83 浏览

python - python逻辑谜题关系

尝试使用 Logic 在 python 中解决以下问题:

结果是:

这让我无法跑步

你能帮我解决一下吗?

谢谢你。

0 投票
1 回答
68 浏览

clojure - 查询变量位于特定位置时不终止

考虑这篇博文,作者使用以下方法实现回文关系reverso

当我运行(run* [q] (reverso q [1 2 3]))时,输出是([3 2 1]). 但是,当我运行时(run* [q] (reverso [1 2 3] q)),程序不会终止。我可以通过明确地请求一个结果来获得正确的结果run 1

在进行实验时,我能够自己使用以下方法实现相同的功能defne

但同样的问题也存在。但是,如果我将自定义更改conjo2core.logic/conjo,则变量在非终止期间的位置会发生变化。

  • 为什么对于具有查询变量特定位置的一般查询,程序不会终止?
  • 为什么指定run 1成功,但run 2程序没有终止?
0 投票
1 回答
41 浏览

clojure - 从地图中提取有限域 lvar

我想将具有有限域的新 lvar 放入映射中,并在我的代码的另一部分中建立它们之间的关系。考虑下面的片段:

有没有办法做到这一点?

0 投票
0 回答
64 浏览

clojure - 具有许多有限域约束的 core.logic 的性能特征

我在 miniKanren 学习关系编程,我决定实现一个时间调度系统。基本上,它归结为有限域上的三个关系。

首先,有一个时间带,它具有开始、持续时间、结束并出现在空间中:

然后,在条带列表(这是一个 4 元素列表的列表)上存在发生之前的关系。这是两个事件的结束和开始之间的成对关系:

最后,有一个非重叠关系,即两个时间带在共享相同空间时不能重叠:

我可以对关系链运行很长的查询happens-beforo,数千个时间带都可以。当我限制这些时间带的空间时,问题就开始出现了。这是一个功能:

对于条带 q 的列表,它在每两个元素之间建立non-overlappo关系。由于是双向关系,所以小于n^2。

当我constrain-spaco只使用 10 条时,搜索时间就会增加,我无法产生任何结果。

到目前为止,我一直在尝试减少这个时间的方法,似乎它与竞争一个空间的条带数量有关,而不管总共有多少条带。如果我创建两组条带,一组在空间 0 中,另一组在空间 1 中并应用于constrain-spaco整个条带列表,那么时间是这些条带分别计算的时间之和。

我的问题是:

  1. 为什么有限域约束的数量会对时间产生如此大的影响?我的印象是约束的数量有助于搜索时间。
  2. 有什么办法可以缩短搜索时间?也许改变数据表示?
0 投票
1 回答
32 浏览

python - Python 看人关系

我正在与 kanren 合作进行逻辑编程,这对我来说是全新的。我已经了解如何建立关系,但我想与多个特征建立关系,例如适合这个描述:

  • 定义关系食物并规划这些事实:鳄梨、胡萝卜、番茄和西兰花是食物。
  • 定义关系颜色并对这些事实进行编程:胡萝卜是橙色的,鳄梨是绿色的,西兰花是绿色的,番茄是红色的。
  • 定义一个喜欢的关系并对这些事实进行编程:Jeff 喜欢胡萝卜、鳄梨和棒球,Bill 喜欢鳄梨和棒球,Steve 喜欢番茄和棒球,Mary 喜欢花椰菜,而 Peter 喜欢棒球。

第一部分非常简单,这是我到目前为止所拥有的,我相信这是正确的。

第二部分是令人困惑的地方,但我认为当我查看可以在文档中找到的父示例时它应该是正确的。

第三部分是我完全迷失的地方,我认为这是不正确的,因为我尝试查询它。这是我到目前为止所拥有的:

关于如何做第三部分的任何建议?