我是函数式编程的新手。
我面临的挑战是关于二叉搜索树如何在 Haskell 中工作的思维导图。
到目前为止,其他语言都很好。但是我如何在 Haskell 中模仿这样的事情,即
注意:这根本不可能,因为数据结构是不可变的,所以我们根本不能使用根来插入一些东西。在这种情况下,Haskell 中如何处理上述情况?
最佳答案
实际上,这一切都以相同的方式发生,除了我们没有改变现有的树变量,而是从中派生一棵新树,并记住那棵新树而不是旧树。
例如,您描述的过程的 C++ 草图可能如下所示:
int main(void) {
Tree<string> root;
while (true) {
string next;
cin >> next;
if (next == "quit") exit(0);
root.insert(next);
doSomethingWith(root);
}
}
一个变量、一个读取操作和一个带有 mutate 步骤的循环。在 haskell 中,我们做同样的事情,但使用递归进行循环和递归变量而不是改变局部变量。main = loop Empty
where loop t = do
next <- getLine
when (next /= "quit") $ do
let t' = insert next t
doSomethingWith t'
loop t'
如果您需要doSomethingWith
能够“变异”t
除了阅读它,您还可以将您的程序提升到状态:main = loop Empty
where loop t = do
next <- getLine
when (next /= "quit") $ do
loop (execState doSomethingWith (insert next t))
关于variables - 我如何记住 Haskell 中二叉搜索树的根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70603384/