问题描述
这个问题是关于一种具有生成器(如 python)和 haskell(本机懒惰)的语言。
我感兴趣的是:如果图形遍历同时是纯的、惰性的和异步的,它会是什么样子(get_neighbors
是异步的,所以一切都需要并行工作,而不是等待一个缓慢的节点。懒惰可以通过生成器或其他方式)。
我设法在 python 中编程的版本是异步的,但可以在每个节点上运行任意函数(不是真的很懒),但我无法让它与异步生成器一起工作并使其变得懒惰。如果没有访问节点的可变集,我也无法做到这一点(因为没有任何东西可以确保执行顺序)。
我的版本是这样的:
async def async_graph_traverse(mapper,root,visited,get_neighbors):
if root in visited: return
visited.add(root)
mapper(root)
neighbors = await get_neighbors(root)
await asyncio.gather(async_graph_traverse(mapper,neighbor,get_neighbors) for neighbor in neighbors)
await async_graph_traverse(do_something_with_each_node,my_root,set(),my_get_neighbors)
我在想——
- 这是否可以在 Python 中以纯粹、懒惰和异步的方式完成?
- 如果没有,可以用 haskell 之类的东西来完成吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)