代数数据类型、值和常见操作的跨平台嵌入式表示。

UxADT的Python项目详细描述


代数数据类型、值和常见操作的跨平台嵌入式表示。

PyPI version and link.

这一系列库支持代数数据类型(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)

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

推荐PyPI第三方库


热门话题
java如何提高我的软件项目的速度?   java将Jetty嵌入JavaSE项目   数组中的java重复字符   java我的Shell排序没有按预期工作,我需要一些帮助来找出我做错了什么   java如何在JBoss EAP6/AS7中应用先过滤后安全约束   java使用一个随机运算符来处理多个变量   java为什么我不能在文件中写我的二叉树?   java应用程序不会在Eclipse emulator上运行   我第一次尝试制作一个简单的基于瓷砖的java游戏   java为TermVectors安装Solr修补程序   java无法将更新的对象值从客户端发送到服务器,服务器读取不存在的值   Azure,java sdk,使用ARM模板部署无法转换参数文件   是否有一个Java等价于空合并运算符(?)在C#?   java如果只初始化了超类对象,是否可以调用特定于子类的方法?   向类文件传递值时出现java NullPointerException   java模不起作用   java Android TranslateAnimation动态更新布局的大小   数据结构如何在java中实例化队列对象?   java如果用户选择一些随机的相机应用程序,如何在安卓中正确处理相机意图?