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))
相关推荐
ppppfly 2020-10-23
柳峰 2020-10-07
jackalwb 2020-10-05
hongsheyoumo 2020-09-04
wking 2020-09-16
XuDanT 2020-09-16
DreamSnow 2020-09-09
smithdoudou 2020-08-16
somyjun 2020-08-16
MongoDB数据库 2020-08-16
古城童话 2020-08-16
李玉志 2020-07-26
白开水 2020-07-19
katanaFlower 2020-07-05
pigsmall 2020-07-04
TimeMagician 2020-06-28
qdqht00 2020-06-28
87901735 2020-06-27
wmliang00 2020-06-25