1

式を取得し、指定された式内で特定のコンストラクターを別のコンストラクターに置き換える関数を作成しようとしています。これに似たもの:

入力:fXY

出力: f XZ

Y と Z はどちらも同じデータ型に属し、さらに show から派生しているため、コンストラクターを比較できます。私の問題は、式内の 1 つのコンストラクターを置き換える方法がわからないことです。それは実際に可能ですか?

[編集]:私の質問を明確にするためのスニペット:

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 に答える