问题标签 [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 - MiniKanren 有“not”运算符吗?
MiniKanren 有“not”运算符吗?
例如,如何表示 Prolog 的
a
如果b
为真c
且不为真则为真(Prolog 使用否定作为失败,即 not(c)
如果c
无法证明则认为已证明)
Prolognot
也适用于非地面表达式,例如
clojure - core.logic 不完整的结果
我在这个简单的关系上苦苦挣扎,结果不完整,我不明白为什么。
我从 core.logic 开始我不知道这是一个错误还是我对它的理解不好。
clojure - 为什么 sorto 的这个实现不会终止?
我是逻辑编程的初学者。
我正在尝试实现这样的排序关系:
(sorto [3 2 1][1 2 3]) -> #s
我正在使用 clojure 和 core.logic:
我不明白为什么在大多数情况下这不能终止。
任何想法都会有所帮助,谢谢。
首先我定义了几个小帮手:
一个简单的计数关系:(counto [a b] 2) -> #s
减少和每一个?关系等价物:
最小关系:(mino 1 2 1) -> #s
列表与其最小元素之间的关系:(mino* [1 2 3 0] 0) -> #s
主要关系:(sorto [2 3 1 4] [1 2 3 4]) -> #s
以下运行不会终止,我想了解原因。
clojure - 如何在 core.logic 中编写自己的简单约束函数?
我刚刚阅读了core.logic的入门。到目前为止这是有道理的,但我不知道去哪里了解更多。
假设我想编写自己的约束,有点像membero
入门中所示。这被称为vectoro
并将事物限制为向量。
现在我希望它返回[1 2]
。你怎么写vectoro
?这在任何地方都有记录吗?
prolog - 正确使用逻辑语言作为工具
我对编程中的“为工作使用正确的工具”理念感兴趣,并且我有一个问题,我认为可以通过逻辑编程来解决。我的意思是幼稚的,因为我没有做过任何逻辑编程,只是开始学习。但是在我仍然试图掌握概念和词汇的阶段,我希望在可能变得太深之前获得一些专家指导。
吸引我使用逻辑编程的想法是我对“统一”概念的模糊了解,但我的想法是以一种我不确定是惯用的还是正确的方式使用它。给定两个对象(或树),我想通过它们的属性(或叶子)比较两者的相等性,我想返回的是一些“差异”的概念——即,给定这两个对象的方式没有什么不同,为了使两者成为某种平等的概念,必须对其中一个进行哪些更改?
例如,假设我有两个对象chair
和stool
. 假设每个都由一个属性或属性列表组成,我想构建一个系统,该系统可以返回类似于“如果凳子legCount
过去4
和hasBack
过去,椅子和凳子将相等true
”的内容。
出于某种原因,从语义上讲,我将其想象为一种余数,例如,chair
减stool
等于一leg
。不确定这是否有帮助...
我可以想到一些使用命令式代码的愚蠢方法以及使用函数式技术的一些更优雅的方法,但我有一种预感,逻辑编程可能特别适合这种情况。任何关于研究方向的智慧将不胜感激,谢谢!
clojure - 在 Clojure 中调试执行缓慢的函数
我正在尝试实现一种解决方案,用于在 clojure 中对数组进行排序所需的最小交换。
该代码有效,但求解 7 元素向量大约需要一秒钟,与 Java 中的类似解决方案相比,这非常糟糕。(已编辑)我已经尝试提供显式类型,但我尝试使用瞬态似乎没有什么不同,但是我在我的解决方案中使用了 subvec 的开放错误 - https://dev.clojure.org/jira /浏览/CLJ-787
关于如何优化解决方案的任何指示?
clojure - 函数不返回(Clojure)
我是 clojure 的新手,我的函数 elligble voters 没有返回向量,我哪里出错了。
clojure - 在core.logic中合成满足特征约束的最小地图?
在core.logic
中,有没有办法翻译程序的输出,例如
进入满足每个解决方案约束的最小映射,在这种情况下{:foo 5, :bar 2}
和{:foo 5, :baz 2}
?
clojure - Clojure 核心逻辑。我可以在事实和规则中使用复杂的数据结构吗?
我正在尝试掌握 core.logic。
我可以在事实和规则中使用复杂的数据结构吗?
例如,我正在尝试这样做:
但它抛出一个错误:
其实在一线
尝试将规则创建为正常功能我错了吗?还是将复杂的数据转化为事实?
clojure - 在 core.logic Clojure (CLP) Cryptoarithmetic 中使用 apply
上面的示例不起作用,因为apply
在fd/eq
. 以下版本send-more-money-solutions
有效,因为我不使用apply
. 我需要使用apply
泛化解决方案来处理不同长度的任意字符串。
我应该怎么办?(对于上面,我有一个想法,我可以编写一个宏(虽然还不确定如何),但实际上我需要能够使用作为逻辑变量序列的变量。如下所示)
错误消息看起来像
我认为宏中发生了一些奇怪的事情,fd/eq
所以我应该尝试不使用eq
宏。
谢谢大家!