问题标签 [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.
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但我不能找到任何有效的东西。
clojure - 将插入事实从 Prolog 转换为 core.logic
我正在玩弄 core.logic 并尝试翻译一些 Prolog 代码并陷入对insert
事实的无休止递归(取自 RAO'Keefe 的“Prolog 工艺”):
这是我到目前为止提出的(请注意,前两个参数被交换以匹配conso
参数列表):
我遇到的问题是,这些 midje 测试的最后两个事实永远不会返回。第一个按预期工作得很好,因为这只需要第一个conso
子句。
我想我忽略了一些明显的东西,但是什么?
编辑:事实不能正确反映 Prolog 代码的行为。正确的行为是这样的:
所以,第二个检查实际上应该是
clojure - 如何匹配包含 lvar 的地图?
我正在尝试使用地图作为我的数据结构,并初始化它们以包含lvars
稍后从其他关系中分配的值。
这成功了:
但这些都失败了:
我正在使用[org.clojure/core.logic "0.8.5"]
. 我怎样才能使这两个目标都成功?
clojure - 为什么 featurec 不产生矛盾?
这是一个矛盾:
因为不可能同时存在true
aq false
。
这不应该也是矛盾的吗?
我不知道那是什么:-
意思。但由于地图键是唯一的,我想不可能有一个地图:k
必须true
和false
. 如何确保第二个目标不匹配?
另一个例子
我将其解释为:
x
是与:k
as类似的地图false
。q
是true
。q
是的:k
值x
我到底想做什么?
我正在尝试用来featurec
创建目标,例如:
然后我想说:
clojure - 当一个(正确的、整数的、非负的)域被乘以一个 lvar 时,Core.logic 错过了 fd/* 的解决方案,在没有域的情况下工作
fd/*
处理负数似乎有问题,即使它们只是常数。它在许多情况下都有效。我究竟做错了什么?
clojure - 从 defrel 和事实到 core.logic.pldb
对于如何在弃用defrel和fact以及迁移到pldb方面如何更改此代码,希望有任何帮助?
这是代码:
clojure - 我的 Clojure 实现排列有什么问题
我知道有多种方法可以使用 Clojure 解决排列问题。我曾尝试使用 Core.Logic 创建 DCG(定句语法),但库的 DCG 部分过于实验性且无法正常工作。
在下面的代码中,我尝试了两种不同的方法。一个是列表理解(注释掉),类似于我在 Haskell 中解决这个问题的方式。
第二种方法使用 MapCat 将 cons/first 应用于递归调用排列的每个返回值。删除项目确保我不会在每个位置多次使用相同的字母。
有人可以解释一下列表理解方法有什么问题以及 MapCat 方法有什么问题吗?在 Haskell 中推理这类问题要容易得多——我是否缺少关于 Clojure 的一些观点?
编辑:@thumbnail 已经解决了评论中的 MapCat 子问题
clojure - core.logic matche,defne 模式匹配结构使用什么语法?
一些 core.logic 构造(matcha
, matche
, matchu
, defne
, fne
)使用模式匹配表达式作为主体,可以使用如下:
(来自Logic-Starter wiki 的示例)
但是我在 core.logic 文档中找不到模式匹配的语法规范。这是什么语法?也许我可以在一些 minikanren 文档或书籍中找到它?
- 带前缀和不带前缀的匹配变量有什么区别
?
? .
除了带有(类似于&
clojure)的列表之外,还有其他破坏性构造吗?- 将
[_ _]
仅匹配具有两个元素的序列吗? - 可以破坏地图吗?
clojure - core.logic 统一匹配映射中的值但不匹配键
我不明白为什么从以下两个示例中,第一个返回正确的值(1)
,而第二个返回()
。我已经预料到(:key)
它找不到解决方案的结果或异常,但不是一个空列表。
clojure - 使用约束逻辑对配方和可用成分进行建模
想象一下,我的厨房里有许多不同菜肴的食谱和一个装有各种食材的储藏室。我想构建一个模型core.logic
,使我能够回答以下问题:对于给定的一组成分(即现在我储藏室中的那些),我可以制作哪些食谱?
食谱有些灵活,我需要能够对此进行建模。稍后我想为它们添加数量,但为了开始,让我们暂时忽略它。
我可以看到如何为储藏室建模:
食谱有一个名称和一个成分列表,可以是可选的或以各种方式组合。有n 个食谱。例如,食谱可能(非正式地)如下所示:
我正在努力解决如何用core.logic
. (注意,上面的文字只是说明性的,并不是机器可读的。)
我想查询看起来像这样:
这将返回以下结果(给定上面的储藏室定义):
我的问题是:如何对这些食谱进行建模,以便我可以对食谱和储藏室编写查询,以列出给定储藏室当前内容的可能食谱的名称?