代数数据类型、值和常见操作的跨平台嵌入式表示。
UxADT的Python项目详细描述
代数数据类型、值和常见操作的跨平台嵌入式表示。
这一系列库支持代数数据类型(ADT)值的跨平台嵌入式表示,以及代数数据类型值的通用操作(如模式匹配)的特定于平台的嵌入式编程抽象。
软件包安装和使用
PYPI上提供该软件包:
python -m pip install uxadt
库可以按通常的方式导入:
import uxadt
为了简洁起见,您可能需要将_
定义为全局:
_ = None
只要不是uxadt值,分配给_
的内容就无关紧要。
示例
下面是一个简单的代数数据类型定义:
uxadt._({\ 'Node': [_, _],\ 'Leaf': []\ })
为了更好地记录与定义相关联的隐式约束,可以为代数数据类型和构造函数参数类型提供显式名称(库本身当前不支持静态或动态检查此信息所隐含的约束):
uxadt._('Tree', {\ 'Node': ['Tree', 'Tree'],\ 'Leaf': []\ })
可以通过以下方式将单个值构建为表达式:
Node(Node(Leaf(), Leaf()), Leaf())
下面是一个简单的递归函数,它计算树值中的节点数(即,与上例中的代数数据类型定义相对应的值):
def size(t): return t\ ._(Leaf(), lambda: 1)\ ._(Node(_, _), lambda x,y: 1 + size(x) + size(y))\ .end
库为使用模式匹配提供了一个备用接口,该接口遵循一个更为必要的范式(这可能很有用,因为lambda
表达式的主体不能是语句):
def size(t): if t < Leaf(): return 1 elif t < Node(_, _): (x, y) = t return 1 + size(x) + size(y)