gpt4 book ai didi

algorithm - Haskell 递归方案 : Traverse two structures simultaneously

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:55 25 4
gpt4 key购买 nike

我正在尝试使用递归方案编写罗宾逊统一算法。统一算法采用两种类型并吐出一个结果。类型是:

data TypeF a
= TypeApplication a a
| TypeVariable Name
deriving (Read,Show,Eq,Functor,Foldable,Traversable)
type Type = Fix TypeF

unify :: Type -> Type -> Result
unify = ...

如何使用递归方案优雅地完成这项工作?

最佳答案

我只是建议柯里化(Currying)和同态。

data TypeF a
= TypeApplication a a
| TypeVariable Name
deriving (Read,Show,Eq,Functor,Foldable,Traversable)
type Type = Fix TypeF

unify :: (Type, Type) -> Result
unify = hylo algebra coalgebra
where algebra :: TypeF Result -> Result
algebra = ...
coalgebra :: (Type, Type) -> TypeF (Type, Type)
coalgebra = ...

顺便说一句,我可能会像下面这样使用 TypeF,使用 recursion-schemes包。

import Data.Functor.Foldable.TH (makeBaseFunctor)

data Type = TypeApplication Type Type
| TypeVariable Name

makeBaseFunctor ''Type

在这种情况下,这将自动生成您想要的内容,无需使用 Fix

关于algorithm - Haskell 递归方案 : Traverse two structures simultaneously,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46130052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com