1

ハイガイズ、

複数のノードを持つことができるツリーのポリモーフィック データ型を定義する必要があります。各ノードは、任意の数の子と値を持つことができます。このタイプには、常に少なくとも 1 つのノードがあります。私はHaskellが初めてなので、ノードが可変数の引数を持つように宣言する方法を尋ねています。

これは私が今持っているものです。これは、Node または値 (a) を持つノードと 2 つのツリーの子を持つことができるツリーです。2 つのツリーの子の代わりに、任意の数のツリーの子にしたいと考えています。(Java 可変数の引数 "arg..." と同様)

data Tree a = Node a | Node a (Tree a) (Tree a) deriving (Show)

ご協力いただきありがとうございます

編集

ちょっとした質問::: 関数パラメーター (ヘッダー/署名) で可変引数を使用してこのノードを宣言するにはどうすればよいですか。
ノードに特定の要素が含まれているかどうかを確認する「contains」 という関数を実装する必要があります。

contains :: Tree a -> b -> Bool
contains (Node val [(tree)]) =   ......

2行目は正しいですか?

4

1 に答える 1

4

それはそのようになります:

data Tree a = Node a | Node a [(Tree a)] deriving (Show)

しかし、それに加えて、これが必要であるという2番目の問題があります

data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show)

または、ユニオンの一部は異なる名前にする必要があります。そうしないと、パターンマッチングを使用できません。

LeafBranchはデータコンストラクタなので、次のようになります。

Branch 1 [Leaf 3, Branch 6 [Leaf 5]]

の例ですTree


contains :: Tree a -> a -> Boolean 
contains (Leaf a) b = a == b
contains (Branch a c) b = a == b || any (map (\t -> contains t b) c)

またはそのような

于 2010-12-03T01:59:05.047 に答える