一部のデータを取り込んで値の配列を返す関数があります。データのリストをツリーにマップする必要があります。
ツリーを作成すると、関数の呼び出しごとに次の 3 つのパラメーターが必要になります。
- 文字列の文字
- 文字列からの文字のインデックス
- ノードの親の関数の出力の一部 (またはルートのゼロ)
議論のために、私が持っているとしましょう:
input = "ABC"
func :: (Char, Int, Int) -> [(Char, Int, Int)]
func ('A', 1, 0) = [('Q', 1, 1243)]
func ('B', 2, 1243) = [('D', 2, 7512), ('R', 2, 8253)] -- 1243 taken from above
func ('C', 3, 7512) = [('E', 3, 2765)]
func ('C', 3, 8253) = [('Z', 3, 9836)]
次のようなツリーにマップされます。
('Q', 1243)
/ \
('D',7512) ('R',8253)
| |
('E',2765) ('Z',9836)
最初の 2 つのパラメーターは問題ありません。リストを作成する前に取得できます。
input `zip` [1..]
ただし、ツリーの構築を開始する前にルート ノードの値 (ゼロになる) しか知らないため、3 番目のパラメーターを取得する方法がわかりません。モナドについて学ぶ必要がありますか?
注: 私は、Haskell と関数型プログラミング全般についてまったくの初心者です。