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

clojure - 无法解析符号:此上下文中的 defrel

我无法让 clojure从 core.logic 库中识别defrel 。因此,在使用 lein(和 compojure)设置项目并让 core.logic run*工作之后,我尝试了一个使用defrel的简单示例...下面是生成的标头,包括 :use clojure.core.logic 和失败(有关我想运行的完整示例,请参阅http://objectcommando.com/blog/2011/11/04/the-magical-island-of-kanren-core-logic-intro-part-1/ ) .

lein 2.0生成的project.clj文件如下:

如果我运行 lein ring server 我得到:

根据 lein 的说法,一切都是最新的,即:lein deps 会相应地下载所有内容等。O/S 是 Ubuntu 13。

从命令行:

再次运行 * 工作正常。

我试过通过http://blog.8thlight.com/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html但我不能找到任何有效的东西。

0 投票
2 回答
166 浏览

clojure - 将插入事实从 Prolog 转换为 core.logic

我正在玩弄 core.logic 并尝试翻译一些 Prolog 代码并陷入对insert事实的无休止递归(取自 RAO'Keefe 的“Prolog 工艺”):

这是我到目前为止提出的(请注意,前两个参数被交换以匹配conso参数列表):

我遇到的问题是,这些 midje 测试的最后两个事实永远不会返回。第一个按预期工作得很好,因为这只需要第一个conso子句。

我想我忽略了一些明显的东西,但是什么?

编辑:事实不能正确反映 Prolog 代码的行为。正确的行为是这样的:

所以,第二个检查实际上应该是

0 投票
1 回答
181 浏览

clojure - 如何匹配包含 lvar 的地图?

我正在尝试使用地图作为我的数据结构,并初始化它们以包含lvars稍后从其他关系中分配的值。

这成功了:

但这些都失败了:

我正在使用[org.clojure/core.logic "0.8.5"]. 我怎样才能使这两个目标都成功?

0 投票
0 回答
147 浏览

clojure - 为什么 featurec 不产生矛盾?

这是一个矛盾:

因为不可能同时存在trueaq false

这不应该也是矛盾的吗?

我不知道那是什么:-意思。但由于地图键是唯一的,我想不可能有一个地图:k必须truefalse. 如何确保第二个目标不匹配?

另一个例子

我将其解释为:

  • x是与:kas类似的地图false
  • qtrue
  • q是的:kx

我到底想做什么?

我正在尝试用来featurec创建目标,例如:

然后我想说:

0 投票
0 回答
115 浏览

clojure - 当一个(正确的、整数的、非负的)域被乘以一个 lvar 时,Core.logic 错过了 fd/* 的解决方案,在没有域的情况下工作

fd/*处理负数似乎有问题,即使它们只是常数。它在许多情况下都有效。我究竟做错了什么?

0 投票
1 回答
1009 浏览

clojure - 从 defrel 和事实到 core.logic.pldb

对于如何在弃用defrelfact以及迁移到pldb方面如何更改此代码,希望有任何帮助?

这是代码:

0 投票
2 回答
477 浏览

clojure - 我的 Clojure 实现排列有什么问题

我知道有多种方法可以使用 Clojure 解决排列问题。我曾尝试使用 Core.Logic 创建 DCG(定句语法),但库的 DCG 部分过于实验性且无法正常工作。

在下面的代码中,我尝试了两种不同的方法。一个是列表理解(注释掉),类似于我在 Haskell 中解决这个问题的方式。

第二种方法使用 MapCat 将 cons/first 应用于递归调用排列的每个返回值。删除项目确保我不会在每个位置多次使用相同的字母。

有人可以解释一下列表理解方法有什么问题以及 MapCat 方法有什么问题吗?在 Haskell 中推理这类问题要容易得多——我是否缺少关于 Clojure 的一些观点?

编辑:@thumbnail 已经解决了评论中的 MapCat 子问题

0 投票
1 回答
569 浏览

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

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

(来自Logic-Starter wiki 的示例)

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

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

clojure - core.logic 统一匹配映射中的值但不匹配键

我不明白为什么从以下两个示例中,第一个返回正确的值(1),而第二个返回()。我已经预料到(:key)它找不到解决方案的结果或异常,但不是一个空列表。

0 投票
1 回答
150 浏览

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

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

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

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

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

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

我想查询看起来像这样:

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

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