python中的逻辑编程

kanren的Python项目详细描述


Kanren
==

[![](https://travis ci.org/logpy/logpy.png)](https://travis ci.org/logpy/logpy)





python中的逻辑编程示例
--


kanren启用关系表达式并搜索满足关系的值。下面的代码是"你好,世界!"逻辑程序设计。它要求"1"数字"x",这样"x==5"就可以从kanren import run,eq,membero,var,conde
>;>;x=var()
>;>;run(1,x,eq(x,5))
(5,)
~~~~~~~~~~~~~~~

可以同时使用多个变量和多个目标。
下面的代码要求输入一个数字x,使"x==z"和"z==3"

~python
~gt;>;z=var()
>;>;运行(1,x,eq(x,z),
eq(z,3))
(3,)
~~~~~~~~~~~~

kanren使用[统一](http://en.wikipedia.org/wiki/unification\u28computer\u science%29),一种高级的模式匹配形式,在表达式树中进行匹配。
下面的代码要求一个数字x,这样`(1,2)=(1,x)`holds.

~~~~~~~~ python
>;>run(1,x,eq((1,2),(1,x))
(2,)
~~~~~~~~~~~~~~~

以上示例使用'eq',a*目标构造函数*声明两个表达式
相等。其他目标构造函数也存在,例如"membero(item,coll)",它
声明"item"是集合"coll"的成员。

4)`。

~~~~~~~~~~~~~~~~~~~~~~~~ python
>;run(2,x,成员o(x,(1,2,2,3,3)),x是(1,2,3)
成员o(x,(2,3,3,4)),x是(1,2,2,2,3,3)
(2,3)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~逻辑变量

如上述示例所示,` z=var()`创建逻辑变量。您还可以(可选)为变量传递令牌名称以帮助调试:

~~~~~~~~~~~~~ python
>;>;z=var('test')
>;>;z
~test
~~~~~~~ br/>
您还可以将"vars()"与整数参数一起使用,一次创建多个逻辑变量:

~~~~~~~~~~ python
>;>;a,b,c=vars(3)
>;>;a
~u 1
>;>;b
~u 2
>;>;c
~~u 3
~~~~~~~~~~

表示知识

kanren将数据存储为陈述术语之间关系的事实。

家族。

~~~~~~~~~~巨蟒
>;>>来自Kanren导入关系,事实
>;>>父=关系()
>;>>事实(父("homer","bart"),
…("荷马","丽莎"),
…("abe","homer"))

>;>run(1,x,parent(x,"bart"))
("homer",)


>;>run(2,x,parent("homer",x))
("lisa","bart")
~巴特的祖父是谁?

~python
>;y=var()
>;>;运行(1,x,父(x,y),
父(y,bart))
('abe',)
~在本例中,我们使用'conde',这是逻辑*和*和*或*

~~~~~~~~~~ python
>;>>def祖父母(x,z):
…y=var()
…返回conde((parent(x,y),parent(y,z)))

>;>;运行(1,x,祖父母(x,bart'))
('abe',)
~~~~~~~~~~~~


数据结构
----

kanren取决于函数、元组、dict和生成器。KanRen中几乎没有新的数据结构/类,因此集成到现有代码中应该很简单。





r/>kanren使用[multiple dispatch](http://github.com/mrocklin/multipledispatch/)和[unification library](https://github.com/mrocklin/unification)支持用户定义类型的模式匹配。另请参见[统一(维基百科)](http://en.wikipedia.org/wiki/unification\u%28计算机科学%29)。
可以统一的类型可用于逻辑编程。请参阅[项目示例](https://github.com/mrocklin/unification\examples)了解如何将可统一类型的集合扩展到您的用例。

install
----


git@github.com:logpy/logpy.git
cd logpy
python setup.py install


tox



dependencies
----

``kanren`支持python 2.7+和python 3.3+,代码库是纯python,不需要依赖项。
在标准库之外,[`toolz`](http://github.com/pytoolz/toolz/),
[`multipledispatch`](http://github.com/mrocklin/multipledispatch/),
[`unification`](http://github.com/mrocklin/unification/)。

一个轻量级的依赖项。

author
----

[matthew rocklin](http://matthewrocklin.com)


license
----

new bsd license。参见license.txt


动机
——


逻辑编程是一种通用编程范式。然而,这个实现是专门为python中的计算机代数系统和数字软件的自动生成和优化提供算法核心的。领域特定语言、代码生成和编译器最近一直是科学python社区的热门话题。Kanren旨在成为这些项目的底层核心。

基于。更多信息可以在
[威廉的论文
byrd]中找到(https://scholarworks.iu.edu/dspace/bitstream/handle/2022/8777/byrd戋u indiana戋u 0093A戋u 10344.pdf)。
*[核心逻辑](https://github.com/clojure/core.logic)clojure中流行的minikanren实现。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
API调用时返回java Null   JavaJAXB:如何从嵌套元素中检索文本属性?   java如何在Windows机器上用Maven创建Dockerfile,然后发送到远程Linux服务器以构建映像,然后运行?   并行处理集群java独立应用程序   java使用POST将图像上传到服务器   分发组的java JavaMail/Exchange AuthAs标头   swing Java JScrollPane多个组件   JAXB将XML文档映射到Java对象   java如何在JDK中实现OpenCSV CSVReader,我正在使用VSC代码   基于屏幕大小的java翻译动画   在java中比较堆栈元素和对象的搜索   java如何在Swing中更改化身?   java JAXB将1个XML标记映射到2个变量   java面试问题:递归生成素数的最快方法是什么?   JavaEclipseIDE频繁关闭   Java中从像素读取RGB值的图像   通过查询oracle DB列值获得的字符串中的java转义XML特殊字符   java从ArrayList中删除多个项