用另一个构造函数替换构造函数的函数

时间:2013-09-17 04:02:29

标签: haskell constructor

我正在尝试编写一个获取表达式的函数,并在给定的表达式中用特定的构造函数替换另一个。 类似的东西:

输入: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

1 个答案:

答案 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