1

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

输入:f XY

输出:f XZ

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
4

1 回答 1

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
于 2013-09-17T05:42:24.463 回答