如何在Python中优雅地表示无限的Haskell递归数据结构?

3phpmpom  于 2022-11-14  发布在  Python
关注(0)|答案(2)|浏览(112)

关于How to elegantly represent finite Haskell recursive datastructure in Python?,我在想如何使用Haskell FFI在Python中表示来自Haskell的无限数据结构(其中没有任何非构造函数)。
不幸的是,我还没有找到任何优雅的东西,因为是在这个伟大的this answer (JSON representation of finite structure)从左回旋处。
从Haskell到Python,有没有类似的优雅方式来表示无限数据结构?

whhtz7ly

whhtz7ly1#

我建议两条路线中的一条。

  • 传递一个不透明的指针给Python。在Haskell中定义一个API,用于观察和构造适当类型的东西,并通过FFI公开该API。(我在链接的问题中也建议了这一点...)
  • 首先显式地构造图,并将图结构传递给Python。例如,你可以使用data-reify来实现这一点,同时保留用于构造和模式匹配自定义类型的常用语法。
mbskvtky

mbskvtky2#

我认为自动激活提供了一个有趣的方式来创建一个递归的数据结构。

>>> class Tree(dict):
...     def __missing__(self, key):
...         value = self[key] = type(self)()
...         return value

>>> # Common names by class, order, genus, and type-species
>>> common_names = Tree()
>>> common_names['Mammalia']['Primates']['Homo']['H. sapiens'] = 'human being'
>>> common_names
{'Mammalia': {'Primates': {'Homo': {'H. sapiens': 'human being'}}}}

还有一种更紧凑的实现,使用defaultdict by Stephan

import collections

def Tree():
    return collections.defaultdict(Tree)

相关问题