我正在尝试编写一个获取表达式的函数,并在给定的表达式中用特定的构造函数替换另一个。 类似的东西:
输入:f X Y输出:f X Z
Y和Z都属于相同的数据类型,而且它们派生自show,所以我可以比较构造函数。我的问题是我不知道如何替换表达式中的一个构造函数。它真的可能吗?
[编辑]:一些片段以澄清我的问题:
data Message = X | Y | Z deriving(show)
data Term = F Message Message | G Term
substitute::Term->Term
substitue Term = -- another term with Y replaced with Z
答案 0 :(得分:3)
如果我的理解是正确的,那么你在谈论模式匹配:
data Message = X | Y | Z deriving (Show)
data Term = F Message Message deriving (Show)
substitute :: Term -> Term
substitute (F Y x) = substitute (F Z x)
substitute (F x Y) = F x Z
substitute t = t
main = do
print $ substitute $ F X X
print $ substitute $ F X Y
print $ substitute $ F Y X
print $ substitute $ F Y Y
输出:
F X X
F X Z
F Z X
F Z Z