我有一个函数,它接收一些数据并返回一个值数组。我需要将数据列表映射到树上。
当我创建树时,每次调用我的函数都需要三个参数:
- 字符串中的一个字符
- 字符串中字符的索引
- 节点父节点的函数输出的一部分(或根节点的零)
为了争论,假设我有:
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)
前两个参数很好,我可以在构建列表之前获取它们:
input `zip` [1..]
我不确定如何获取第三个参数,因为在开始构建树之前我只知道根节点的值(将为零)。我必须学习 Monads 吗?
注意:我对 Haskell 和一般的函数式编程完全陌生。