问题标签 [clojure-core.logic]

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 回答
3194 浏览

clojure - 表示 X 的特定子集在 core.logic 中具有属性 Y

我想要:

  1. 描述关于一类对象的子集的事实。
  2. 声明一个对象具有一个由其他属性组成的属性。

以以下为例:

我想表达一类鸟,红色和机器人的鸟,有一个属性。这个特性是它们仅由按钮、奶酪和电线组成。线奶酪或纽扣的类型没有限制。同样因此,应该可以推断出没有由纸组成的红色机器鸟。此外,这些鸟可以由项目按钮、奶酪和电线的子集组成。

在 clojure/core.logic.prelude 中,有使用defreland的关系和事实fact。但是,我想不出一个组合来解释这个事实。

0 投票
1 回答
531 浏览

clojure - 为什么 run* 不适用于 core.logic 中的自然数?

我正在GitHub 上玩 core.logic 的 Peano 算术应用程序。当我尝试

Clojure 吐出一个错误,但是,

(_.0)按预期成功。这里有一些实现细节吗?

编辑:

我正在运行以下代码:

堆栈跟踪是:

项目.clj

0 投票
2 回答
1048 浏览

clojure - 如何在 core.logic 中模拟“外部连接”?

我刚刚开始使用 core.logic,为了解决这个问题,我正在尝试实现一些简单的东西,类似于我目前正在专业处理的问题。然而,问题的一部分让我难住了......

作为我的示例的简化,如果我有一个项目目录,其中一些仅在某些国家/地区可用,而有些在特定国家/地区不可用。我希望能够指定项目列表和例外情况,例如:

如果可能的话,我宁愿不为所有国家/地区指定允许进入,因为有限制的项目集相对较小,我希望能够进行一次更改以允许/排除给定项目的项目国家。

如何编写一个规则,给出一个国家/地区的项目/颜色列表,并具有以下约束:

  • 该项目必须在项目列表中
  • 国家/项​​目不得在“不允许进入”列表中
  • 任何一个:
    • 该项目的限制列表中没有国家
    • 国家/项​​目对在限制列表中

有没有办法做到这一点?我是否以完全错误的方式思考事情?

0 投票
2 回答
1266 浏览

clojure - 使用 core.logic 查询家谱时消除重复结果

我正在用 core.logic 建模一个家谱。我想run*查询并让他们返回所有结果而不重复。将所有defn替换def tabled为我所期望的结果(至少现在是这样),我知道这一点condu并且onceo可以减少结果的数量,但我不确定其中任何一个是否是消除重复项的最佳方法。

我特别担心我目前的方法,因为声明关系和函数似乎是重复的工作。我知道我的一些关系是“相互递归的”(mothero并且相互womano引用),但我这样做是因为将来我可能会添加一个新的(defrel mother*),这应该可以推断出母亲既是父母又是女人。

0 投票
2 回答
1268 浏览

clojure - Core.logic的简明解释

我想使用 Clojure 的 Core.logic。但是,我也想了解它是如何工作的。在某处是否有简明的解释?(比如实现一个元循环评估器?)

谢谢!

0 投票
2 回答
211 浏览

clojure - 匹配列表

我想知道是否可以使用 matche 之类的东西与 core.logic 中的列表进行模式匹配

与向量类似

效果很好,但我不知道如何匹配列表 (foo :u 2) 而不是向量。原因是我想使用 core.logic 分析 clojure 程序。

0 投票
1 回答
874 浏览

clojure - mini-Kanren,core.logic,clojure:推理方案练习60

这不是家庭作业——解决方案已经在文本中。我只是无法理解解决方案。

问题

正确的解决方案

我相信的解决方案

我的困惑

显然“a (== true q)”行没有被执行,因为只有 b 是目标。这让我很困惑。到目前为止,我的逻辑编程心智模型是:

  • 考虑对 q 的所有可能分配
  • 输出设法通过整个程序的那些

    因此,“a (== true q)”强制 q = true,这使得不可能满足“b (== false q)”行。

    然而,显然只执行“计算目标所需的事情”。这是怎么回事?core.logic / mini-kanren 的正确心理执行模型是什么?

谢谢

(顺便说一句,我显然错了,因为 mini-karen + core.logic 彼此一致——我只是想了解我做错了什么。)

0 投票
1 回答
274 浏览

clojure - Clojure、core.logic、mini-kanren、Reasoned Schemer

代码

结果

问题:

为什么?这是怎么回事?run* 和宏之间是否有一些奇怪的交互?

谢谢!

0 投票
1 回答
211 浏览

clojure - Clojure、core.logic、mini-kanren:eqo vs ==

我知道:https ://github.com/clojure/core.logic/wiki/Differences-from-The-Reasoned-Schemer

语境

迷你看人代码:

核心逻辑代码

这会产生结果 (),这是正确的答案。

问题:

eqo 和 == 是一样的,还是我在上面的例子中只是幸运?谢谢!

0 投票
2 回答
330 浏览

clojure - Clojure,core.logic:列表

根据https://github.com/clojure/core.logic/wiki/Differences-from-The-Reasoned-Schemer core.logic 支持 listo。

但是,以下代码无法编译

它抱怨:

异常:java.lang.RuntimeException:无法解析符号:此上下文中的 listo,正在编译:(test/chap03.clj:8)

问题:发生了什么事,我如何获得 listo?