私は、次の2つの機能/問題の解決にあなたの助けが必要:マッピングより一覧
1)
私は、ツリー内の要素を交換する必要があります。ツリーのブランチは、以下に示すように、任意の数のサブブランチをコード内に持つことができます。
data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show)
mapmtree :: (a -> a) -> Tree a -> Tree a
mapmtree f (Leaf a) = (f a)
mapmtree f (Branch a c) = Branch (map f a) (mapmtree f c)
要素を移動して変更する必要があります。私の問題は最後の行です。 mapmtree関数は(Tree a)を受け入れますが、ブランチはサブブランチのリストを持つことができるので、エラーが発生して上記のコードをコンパイルすることはできません。ブランチのサブリストでmapmtree関数を呼び出すにはどうすればよいですか?
これは私がそれをロードするときに私が取得エラーです:
Couldn't match expected type `Tree a'
against inferred type `[Tree a]'
In the second argument of `mapmtree', namely `c'
In the second argument of `Branch', namely `(mapmtree f c)'
In the expression: Branch (map f a) (mapmtree f c)
2)
もう一つはこれがコードです深さ優先にリストにツリーを回すを扱います私は今ではありませんでしたが、さらに気をつけています。
それを実装する。上記と同じ問題は、支店は多くのサブツリーを持つことができ、深さ - 最初にでそれらを通過して要素のリストを作成する必要があります。
ので、私に怒ってはいけないハスケルの総初心者午前ください。
おかげ
実際にFunctorを作成することに注意してください。それで 'maptree'を' fmap'に変更し、それを 'Functor'のtypeclassのインスタンスにします。実際にあなたのタイプシグネチャを変更する必要があります。 – fuz