问题标签 [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.
python - python逻辑谜题关系
尝试使用 Logic 在 python 中解决以下问题:
结果是:
这让我无法跑步
你能帮我解决一下吗?
谢谢你。
clojure - 查询变量位于特定位置时不终止
考虑这篇博文,作者使用以下方法实现回文关系reverso
:
当我运行(run* [q] (reverso q [1 2 3]))
时,输出是([3 2 1])
. 但是,当我运行时(run* [q] (reverso [1 2 3] q))
,程序不会终止。我可以通过明确地请求一个结果来获得正确的结果run 1
。
在进行实验时,我能够自己使用以下方法实现相同的功能defne
:
但同样的问题也存在。但是,如果我将自定义更改conjo2
为core.logic/conjo
,则变量在非终止期间的位置会发生变化。
- 为什么对于具有查询变量特定位置的一般查询,程序不会终止?
- 为什么指定
run 1
成功,但run 2
程序没有终止?
clojure - 从地图中提取有限域 lvar
我想将具有有限域的新 lvar 放入映射中,并在我的代码的另一部分中建立它们之间的关系。考虑下面的片段:
有没有办法做到这一点?
clojure - 具有许多有限域约束的 core.logic 的性能特征
我在 miniKanren 学习关系编程,我决定实现一个时间调度系统。基本上,它归结为有限域上的三个关系。
首先,有一个时间带,它具有开始、持续时间、结束并出现在空间中:
然后,在条带列表(这是一个 4 元素列表的列表)上存在发生之前的关系。这是两个事件的结束和开始之间的成对关系:
最后,有一个非重叠关系,即两个时间带在共享相同空间时不能重叠:
我可以对关系链运行很长的查询happens-beforo
,数千个时间带都可以。当我限制这些时间带的空间时,问题就开始出现了。这是一个功能:
对于条带 q 的列表,它在每两个元素之间建立non-overlappo
关系。由于是双向关系,所以小于n^2。
当我constrain-spaco
只使用 10 条时,搜索时间就会增加,我无法产生任何结果。
到目前为止,我一直在尝试减少这个时间的方法,似乎它与竞争一个空间的条带数量有关,而不管总共有多少条带。如果我创建两组条带,一组在空间 0 中,另一组在空间 1 中并应用于constrain-spaco
整个条带列表,那么时间是这些条带分别计算的时间之和。
我的问题是:
- 为什么有限域约束的数量会对时间产生如此大的影响?我的印象是约束的数量有助于搜索时间。
- 有什么办法可以缩短搜索时间?也许改变数据表示?
python - Python 看人关系
我正在与 kanren 合作进行逻辑编程,这对我来说是全新的。我已经了解如何建立关系,但我想与多个特征建立关系,例如适合这个描述:
- 定义关系食物并规划这些事实:鳄梨、胡萝卜、番茄和西兰花是食物。
- 定义关系颜色并对这些事实进行编程:胡萝卜是橙色的,鳄梨是绿色的,西兰花是绿色的,番茄是红色的。
- 定义一个喜欢的关系并对这些事实进行编程:Jeff 喜欢胡萝卜、鳄梨和棒球,Bill 喜欢鳄梨和棒球,Steve 喜欢番茄和棒球,Mary 喜欢花椰菜,而 Peter 喜欢棒球。
第一部分非常简单,这是我到目前为止所拥有的,我相信这是正确的。
第二部分是令人困惑的地方,但我认为当我查看可以在文档中找到的父示例时它应该是正确的。
第三部分是我完全迷失的地方,我认为这是不正确的,因为我尝试查询它。这是我到目前为止所拥有的:
关于如何做第三部分的任何建议?