-1

私はC#関連のプログラミング言語に精通していますが、Haskellの質問があります。

単語のリストである文字列があります。ツリー構造にして表示する必要があります。たとえば、次のようなものを表示する必要があります。

ツリーは次のようになります。第1層は文字列1つ、第2層は文字列の3つのリストで、第1層の文字列からグループ化され、第3層は列挙型としてカテゴリ名を3つグループ化します。

"the quick brown fox jumped over the lazy black dog"
("the", "quick", "jumped", "over", "the", "lazy"), ("brown", "black"), ("fox", "dog")
"Other Words", "Colour", "Animal"

したがって、c#でこれらが階層クラスに含まれるかどうか、およびToString表示できるかどうかを理解できます。

Haskellは初めてです。文字列をカテゴリの最終行まで解析する関数を作成しましたが、データをツリー構造に配置して表示する方法がわかりませんか?

4

1 に答える 1

3

Haskell ではデータ型は安価です。それを証明するためにいくつか定義しましょう!

data Layer1 = L1 String [Layer2]

Layer1これは、 という名前のコンストラクターを持つ という名前のデータ型を定義しますL1Stringこのコンストラクターは、このノードの名前を保持する a と、まだ特定されていない type の子のリストの2 つのフィールドを保持しますLayer2

2 番目のタイプを定義しましょう。

data Layer2 = L2 String [String]

この型は、子が文字列であることを除いて、前の型と同じです。

しかし、必要な数のレイヤーを続けたい場合はどうすればよいでしょうか? 幸いなことに、Haskell は再帰的に定義されたデータ構造を受け入れます。最初の型を一般化すると、それ自体を子として格納できます。

data Layer1 = Layer1 String [Layer1]

つまり、everyLayer1は文字列とさらにLayer1s である子のリストを保持します。実際、これは基本的にツリーの定義です。

data Tree a = Node a [Tree a]
于 2012-12-17T22:43:30.370 に答える