我希望能够使用定点数据类型和递归方案来制定hindley-milner类型的推理算法。忽略除实际递归部分之外的所有细节:
w env term = case term of
Lam n e -> lam (w (modify1 env) e)
App a b -> app (w (modify2 env) a) (w (modify3 env) b)
...该算法在递归遍历树直到到达树叶时构建环境数据结构env。然后,当它再次构建结果时,它使用这些信息。
如果没有env部件,这可以通过cata轻松实现。这(对于env)通常可以使用递归方案来完成吗?
发布于 2017-09-09 12:04:06
没有环境部分的
,这可以很容易地用cata实现。这(使用env)通常可以使用递归方案来完成吗?
你要找的是一个chronomorphism。这允许您使用来自未来和过去的结果进行递归。它并不像听起来那么用户友好,但它是使用递归方案做事情的规范方法。
发布于 2017-09-09 11:22:11
是只将
cata的目标设为函数Env -> a
- luqui
可以,但您可能需要使用具有高阶运营商类型的
cata,计算一个可能会修改环境并可能失败的操作。
- pigworker
https://stackoverflow.com/questions/46125839
复制相似问题