统一性
项目描述
直接的统一性,通过分发进行扩展。
示例
>>> from unification import *
>>> unify(1, 1)
{}
>>> unify(1, 2)
False
>>> x = var('x')
>>> unify((1, x), (1, 2))
{~x: 2}
>>> unify((x, x), (1, 2))
False
@unifiable
class Account(object):
def __init__(self, id, name, balance):
self.id = id
self.name = name
self.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) for acct in data]
[{~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) for acct in data]
[False,
{~name: 'Bob', ~id: 2},
{~name: 'Charlie', ~id: 2},
False,
False]
函数分发
统一性支持通过模式匹配进行函数分发。
from unification.match import *
n = var('n')
@match(0)
def fib(n):
return 0
@match(1)
def fib(n):
return 1
@match(n)
def fib(n):
return fib(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}})
def respond(name, amount):
balance[name] += amount
@match({'status': 200, 'data': {'name': name, 'debit': amount}})
def respond(name, amount):
balance[name] -= amount
@match({'status': 404})
def respond():
print("Bad Request")
在示例目录中查看完整示例。
性能和可靠性
这是一个快速拼凑的版本。统一性强调可扩展性而非性能,初步基准测试显示这比基于元组的直接统一性慢2-5倍。
这相当可靠,唯一的警告是集合统一性,这在框架中一般很难实现。它应该适用于中等复杂的情况,但在非常复杂的情况下可能会崩溃。
历史
这是从LogPy和Multiple Dispatch项目中提取出来的。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
unification-0.2.2.tar.gz (6.8 kB 查看哈希值)
构建分发
unification-0.2.2-py2.py3-none-any.whl (10.1 kB 查看哈希值)
关闭
unification-0.2.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e83972eda9a365b51eee97d72436136bfd44b0146f06bb7e8a28cca3eafc79b3 |
|
MD5 | b2f1723d75b0f5c34a7e9be4137eafbf |
|
BLAKE2b-256 | 1c26432ea4a47aded7b0d64662fc265252da2b2a059f92af2eeb3321d60c9f8a |
关闭
unification-0.2.2-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fbf883f0ec618a34b806a830afae2f51833d9db013b520519707b34d7f20c282 |
|
MD5 | dec42ab2e9c0130204e4fcec534d540c |
|
BLAKE2b-256 | f26d24285df596df88923ceea78d980f5dabd1c511e562d9ec1db305fc7c43cd |