`

clojure逻辑编程框架——core.logic入门

阅读更多
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))

分享到:
评论

相关推荐

    逻辑上:对core.logic的探索

    在Clojure编程环境中,`core.logic`库是一个强大的工具,它为开发者提供了基于逻辑编程的框架,特别是受到了Prolog语言的启发。这个标题“逻辑上:对core.logic的探索”暗示我们将深入研究如何利用这个库来解决问题...

    core.logic_examples:Clojure 的 core.logic 的一些有趣例子

    核心逻辑(core.logic)是Clojure编程语言中的一个库,专门用于进行逻辑编程。这个库提供了基于Prolog的约束逻辑编程(CLP)框架,使得开发者可以以声明性的方式处理问题,而不是传统的命令式编程风格。在“core....

    minikanren-confo:2013年minikanren大会上的core.logic.nominal

    《minikanren-confo:2013年minikanren大会上的core.logic.nominal》是关于逻辑编程领域的一篇重要论文实现,它聚焦于Clojure编程语言中的minikanren库和core.logic.nominal子模块。这篇文章及其实现主要讨论了如何...

    core.cache, 用于实现各种缓存策略的用于Clojure的缓存库.zip

    core.cache, 用于实现各种缓存策略的用于Clojure的缓存库 clojure.core. 缓存core.cache 是一个提供以下功能的新的Clojure contrib库:基础 CacheProtocol 用作实现新同步缓存的基抽象用于将 CacheProtocol 实现钩子...

    core.logic

    core.logic为Clojure提供类似于Prolog的关系编程,约束逻辑编程和名义逻辑编程。 它的核心是miniKanren的原始实现,如William Byrd的论文“ 的,以及和描述的扩展。 它被设计为可以轻松扩展到所提供逻辑编程之外的...

    知识:结合Wikidata和clojure core.logic

    Clojure的core.logic库是基于Prolog逻辑编程语言的一个实现,它为Clojure提供了强大的关系推理能力。通过使用核心逻辑,开发者可以定义规则和约束,然后进行推理以解决问题。core.logic提供了诸如`defrule`、`run*`...

    clojure-1.6.0-RC3.zip

    【标题】"clojure-1.6.0-RC3.zip" 涉及的是Clojure编程语言的一个版本,即1.6.0的候选发布版本3(Release Candidate 3)。Clojure是一种基于Lisp的函数式编程语言,它运行在Java虚拟机(JVM)上,充分利用了Java生态...

    pldb:(已弃用)用于 clojure core.logic 的持久逻辑数据库

    PLDB 现在是 core.logic 的一部分! 我强烈建议您使用 core.logic 中的 pldb 版本而不是这个库! 数据库 一个持久的 core.logic 数据库。 pldb 的目标是提供不使用可变命名空间引用的 core.logic 事实/关系机制。 ...

    Clojure(Script)库ClojureSchema.zip

    Schema 是一个 Clojure(Script) 库,用来声明数据描述和验证。 代码示例:(ns schema-examples  (:require [schema.core :as s  :include-macros true ;; cljs only  ])) (def Data  "A schema for ...

    Clojure Handbook(2012.11.1)

    作者强调了笔记的实用性和个人特色,它更适合那些已经具备一定编程背景、特别是有Java经验的开发者,想要快速入门Clojure的人。 Clojure Handbook的这些内容不仅对初学者友好,也对那些对函数式编程感兴趣、希望...

    symbolo-numbero-tests-for-core-logic:Clojure 的 core.logic 的symbolo 和numbero 约束测试

    核心逻辑(core.logic)是Clojure编程语言中的一个强大的约束逻辑编程库,它提供了一种声明式的编程方式,用于解决各种问题,包括推理、搜索和数据建模等。在这个名为"symbolo-numbero-tests-for-core-logic"的项目...

    Pragmatic.Clojure.Applied.From.Practice.to.Practitioner.1680

    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...

    tools.trace, 1.3更新 clojure.contrib.trace.zip

    tools.trace, 1.3更新 clojure.contrib.trace clojure.tools. 跟踪一个Clojure跟踪工具。定义跟踪宏/fns以帮助你查看代码正在执行的操作。以前称为 clojure.contrib.trace 。请参阅 tools.trace API参考代码。发布和...

    logic-puzzles:core.logic解决的难题

    Clojure库生态丰富,其中`core.logic`是一个强大的工具,专门用于创建和解决逻辑谜题,以及进行约束逻辑编程。在这个名为"logic-puzzles:core.logic解决的难题"的主题中,我们将深入探讨`core.logic`如何通过其功能...

    Clojure.High.Performance.JVM.Programming.epub

    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'...

    Lux编程语言_Clojure_Emacs Lisp_下载.zip

    Lux编程语言,是一种基于Clojure和Emacs Lisp的创新编程工具,旨在提供一个高效、灵活且集成开发环境(IDE)的编程体验。Lux的核心设计理念是将Clojure的强大功能与Emacs Lisp的灵活性相结合,创造出一个既适合新手...

    Clojure电子书合集1(12本)

    [2009] Programming Clojure.(Stuart Halloway).[1934356336].pdf [2010] Functional Programming with Clojure - Simple Concurrency on the JVM.(Tim Berglund, Matthew McCullough).[193650202X].pdf [2010] ...

    MiniZinc的Clojure接口库clojure2minizinc.zip

    clojure2minizinc 提供一个 state-of-the-art constraint solvers (via MiniZinc) 和高级编程语言 Clojure 之间的接口。代码示例:(ns clojure2minizinc.examples  (:require [clojure2minizinc.core :as mz])...

Global site tag (gtag.js) - Google Analytics