我有这个AST是否有可能使用递归方案比较两棵树?
data ExprF r = Const Int | Add r r
type Expr = Fix ExprF
,我想比较
x = Fix $ Add (Fix (Const 1)) (Fix (Const 1))
y = Fix $ Add (Fix (Const 1)) (Fix (Const 2))
但是所有的递归方案的功能似乎只用单一结构
显然工作,我可以用递归
eq (Fix (Const x)) (Fix (Const y)) = x == y
eq (Fix (Add x1 y1)) (Fix (Add x2 y2)) = (eq x1 x2) && (eq y1 y2)
eq _ _ = False
但我希望有可能使用s有些拉链功能。
从哪里得到您的Fix? – danidiaz
https:// hackage。haskell.org/package/recursion-schemes – ais
你可能想要一个zygohistomorphic prepromorphism。我不知道它做了什么,但有了这样的名字,我无法想象它有多少*不能做。 :) – chepner