core.logic是miniKanren的一个实现。miniKanren中一个重要的概念就是goal,根据goal来推测可能的结果,这就是它的核心概念。
一、Core.logic的基本语法:
(run* [logic-variable]
logic-expressions)
;;或者
(run 1 [logic-variable]
logic-expressions)
二、三个核心操作符号:fresh, ==, conde。
其实用几段最简单的代码就可以明白。
user=>(run* [q] (fresh [a b ] (== a 1) (== b 2) (== q [a b])))
([1 2])
user=>(run* [q] (fresh [a b] (conde [(== 1 a)] [(== 2 b)]) (== q a) (== q b)))
(1 2)
其中fresh就相当于let,定义局部变量。==就是逻辑相等。conde和cond有点像,用一段伪代码表示就是
(run* [q]
(OR
[goal1 AND goal2 AND ...]
...))
三、来几个高级的goal:conso,resto,membero。其中结尾带o,a,u,e就是一种命名规范而已,为了和clojure自带的cons,rest,member区分开来。
user=> (run* [q] (membero q [1 2 3]))
(1 2 3)
user=> (run* [q] (resto q [1 2 3]))
((_0 1 2 3))
user=> (run* [q] (conso 1 [2 3] q))
((1 2 3))
分享到:
相关推荐
Clojure Handbook(2012.11.1)(笔记)
Lux编程语言_Clojure_Emacs Lisp_下载.zip
core.cache, 用于实现各种缓存策略的用于Clojure的缓存库 clojure.core. 缓存core.cache 是一个提供以下功能的新的Clojure contrib库:基础 CacheProtocol 用作实现新同步缓存的基抽象用于将 CacheProtocol 实现钩子...
core.logic为Clojure提供类似于Prolog的关系编程,约束逻辑编程和名义逻辑编程。 它的核心是miniKanren的原始实现,如William Byrd的论文“ 的,以及和描述的扩展。 它被设计为可以轻松扩展到所提供逻辑编程之外的...
PLDB 现在是 core.logic 的一部分! 我强烈建议您使用 core.logic 中的 pldb 版本而不是这个库! 数据库 一个持久的 core.logic 数据库。 pldb 的目标是提供不使用可变命名空间引用的 core.logic 事实/关系机制。 ...
Learn logic programming through the core.logic library Master asynchronous programming using the core.async library Observe transducers while resolving real-world use cases In Detail Clojure is a ...
core.logic-例子Clojure 的 core.logic 的一些有趣例子当前示例:
Schema 是一个 Clojure(Script) 库,用来声明数据描述和验证。 代码示例:(ns schema-examples (:require [schema.core :as s :include-macros true ;; cljs only ])) (def Data "A schema for ...
逻辑上:对core.logic的探索
tools.trace, 1.3更新 clojure.contrib.trace clojure.tools. 跟踪一个Clojure跟踪工具。定义跟踪宏/fns以帮助你查看代码正在执行的操作。以前称为 clojure.contrib.trace 。请参阅 tools.trace API参考代码。发布和...
Dive into the core concepts of Clojure: immutable collections, concurrency, pure functions, and state management. You'll finally get the complete picture you've been looking for, rather than dozens of...
You'll get acquainted with its various features such as functional programming, concurrency, reducers, transducers, core.async and core.logic, and so on with a great level of detail. Moving on, you'...
clojure2minizinc 提供一个 state-of-the-art constraint solvers (via MiniZinc) 和高级编程语言 Clojure 之间的接口。代码示例:(ns clojure2minizinc.examples (:require [clojure2minizinc.core :as mz])...
Typed Clojure 保留了 Clojure 的优势,是 Clojure 的可选类型系统,也可以说是 Clojure 的一个库,改善了大量的静态类型安全检测。主要特性:从 Java 中保护你的 Clojure 程序,进行安全的互操作,正确的使用外部 ...
Clojure是一种LISP风格的语言,运行在JVM上。Clojure的一大特色就是其并发机制,它支持不可变的数据结构(Clojure是来自于可持久化的数据结构)。Clojure还有一个特色是软件事务存储(Software Transactional Memory...
Clojure编程乐趣和clojure_programming.pdf两本书
inflections-clj, Rails 与Clojure和ClojureScript的拐点库 变化 rails与Clojure和ClojureScript的拐点库。用法(use 'inflections.core)(plural"word");=>"words"(plura
知识:结合Wikidata和clojure core.logic
docjure, 从Clojure读取和写入 Office 文档 DocjureDocjure使得在Clojure中读取和写入 Office 文档变得容易。用法示例:阅读价格表电子表格(use 'dk.ative.docjure.spreadsheet);; Load a sprea