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实现。
==
[![](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实现。