【发布时间】:2014-11-17 08:55:40
【问题描述】:
我正在尝试实现一个函数,该函数以 bfs 顺序收集 OrdTree 中的所有值,但我也很难做到这一点。到目前为止,这是我带来的:
data OrdTree a = OrdTree a [OrdTree a] deriving (Show)
bfsTree :: OrdTree a -> [a]
bfsTree tree =
let
use2DList level list (OrdTree a []) = (list!!level)++[a]
use2DList currentLevel list (OrdTree a (branches)) =
foldl
(\tree theList -> use2DList (currentLevel+1) theList tree)
((list!!currentLevel)++[a])
branches
in
concat (use2DList 0 [] tree)
显然,我遇到了一堆我无法弄清楚的错误。
- 我认为既然它似乎在范围内,我应该能够在 foldl 中使用
currentLevel变量(特别是在匿名函数中),是吗?可以吗?还是只需要使用->左侧指定的操作数? - 我知道这些东西是不可变的,但是列表列表..如果我将一个值附加到列表中的一个列表中,它会更改它,对吗?但是这样的代码返回了什么:
(list!!position)++[value]? - 如果我尝试像这样咖喱它会更好(如果我没猜错的话):
foldl (use2DList (currentLevel+1)) (list!!currentLevel)++[a]) branches还是更糟?
对不起,如果文字太多,我真的对这些东西感到困惑。
【问题讨论】: