【发布时间】:2020-09-01 20:14:18
【问题描述】:
Python 中最接近 Haskell 中递归数据类型的可能是什么? (即在定义自身时使用类型自己的定义。)
编辑:
为了更具体地定义递归类型,下面是 Haskell 中的二叉树:
data Tree a = Leaf a | Branch (Tree a) (Tree a)
我的阅读方式如下:二叉树可以是叶子,也可以包含两个子树,它们又是类型树本身。
有关 Haskell 中递归类型的更多信息,您可以参考这里:https://www.haskell.org/tutorial/goodies.html
我真正想到的是将 Haskell 中的单词树定义转换为 Python。这是我的一个旧项目中WordTree 的定义:
data WordTree = Word String | Subword String [WordTree] | Root [WordTree]
WordTree 是一个 n-arytree 结构,其中单词的公共前缀存储在双亲中,其余部分以排序方式存储在树的叶子中。我相信这种类型定义有点类似于 Trie。然而,由于 Haskell 是一种函数式编程语言,它允许这种类型定义是递归的。对于这种类型的定义,在 Python 中(或者在一般的面向对象编程中)最接近的可能是什么?
【问题讨论】:
-
也许是一个类,其中 init 有 self.self = self :)
-
你能否在 Haskell 中举一个这样的例子,也许有人可以告诉你它是如何在 python 中完成的
-
您能描述一个用例吗?
-
鉴于所使用的类型系统截然不同,Python 中并没有什么非常相似的地方。或许可以使用合适的元类来实现 Haskell 风格的代数类型,但我认为这并不简单。
-
这能回答你的问题吗? Defining a recursive type hint in Python?
标签: python haskell type-hinting algebraic-data-types recursive-datastructures