Python中的逻辑统一

logical-unification的Python项目详细描述


逻辑统一

Build StatusCoverage StatusPyPI

Logical unification在Python中,可通过调度进行扩展。在

安装

使用pip

pip install logical-unification

从源安装:

^{pr2}$

可以使用提供的Makefile运行测试:

make check

示例

unification内置了对大多数Python数据类型的支持:

>>>fromunificationimport*>>>unify(1,1){}>>>unify(1,2)False>>>x=var('x')>>>unify((1,x),(1,2)){~x:2}>>>unify((x,x),(1,2))False

可以使用unifiable修饰符使自定义类“统一”:

@unifiableclassAccount(object):def__init__(self,id,name,balance):self.id=idself.name=nameself.balance=balance>>>data=[Account(1,'Alice',100),Account(2,'Bob',0),Account(2,'Charlie',0),Account(2,'Denis',400),Account(2,'Edith',500)]>>>id,name,balance=var('id'),var('name'),var('balance')>>>[unify(Account(id,name,balance),acct)foracctindata][{~name:'Alice',~balance:100,~id:1},{~name:'Bob',~balance:0,~id:2},{~name:'Charlie',~balance:0,~id:2},{~name:'Denis',~balance:400,~id:2},{~name:'Edith',~balance:500,~id:2}]>>>[unify(Account(id,name,0),acct)foracctindata][False,{~name:'Bob',~id:2},{~name:'Charlie',~id:2},False,False]

unification还支持通过模式匹配进行函数分派:

>>fromunification.matchimport*>>>n=var('n')@match(0)deffib(n):return0@match(1)deffib(n):return1@match(n)deffib(n):returnfib(n-1)+fib(n-2)>>>map(fib,[0,1,2,3,4,5,6,7,8,0])[0,1,1,2,3,5,8,13,21,34]

模式匹配可能相当复杂:

>>name,amount=var('name'),var('amount')@match({'status':200,'data':{'name':name,'credit':amount}})defrespond(name,amount):balance[name]+=amount@match({'status':200,'data':{'name':name,'debit':amount}})defrespond(name,amount):balance[name]-=amount@match({'status':404})defrespond():print("Bad Request")

请参阅examples directory中的完整示例。在

性能和可靠性

unification当前的设计允许对打破Python堆栈递归限制的嵌套结构进行统一和具体化。与简单的基于堆栈的递归统一/重组相比,这种可伸缩性带来了开销成本。在

关于

这个项目是^{}的分支。在

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

推荐PyPI第三方库


热门话题
JavaI从另一个Jframe类B扩展了一个J帧类a,但在显示帧B时,它也在B中播放帧a   java适配器模式应用程序   使用并行流从java列表中获取Pojo,而不使用任何类型的索引   java更新文本文件中的双精度   java从webservice返回自定义对象   java在查找多个集合的交集时使用Retainal()的最快顺序   java如何在安卓社交媒体应用程序中应用用户对用户支付?   c代码能引发java异常吗?   Java数组填充了最后一个插槽中的内容   java JOOQ从大表中获取数据:良好实践   使用ApachePOI在JavaSwing中嵌入excel工作表   java如何使用枚举定义常量值组   java JavaFX将文本追加到TextArea引发异常   javascript JS在firefox中无法正常工作   java如何在同一片段中的片段打开后编辑该片段打开的活动中的值   对夏洛克的命令。py的解释不同于linux命令行和java进程api   php在Java中动态创建全局多维数组   html Java XML Transformer将“\n”替换为空格   Javac编译编码问题