【发布时间】:2019-10-24 02:40:17
【问题描述】:
我正在尝试学习 Haskell,但发现它真的很难,而且网上资源也不多。我似乎对递归调用的外观缺乏了解,并且希望能指出正确的方向。我正在尝试接收一棵树并返回每个叶节点以及存储在那里的符号,以及到达那里的路径。 (因此输入 (Fork (Leaf x) (Leaf y)) 将具有输出 [(x,[False]) ,(y,[True])] )。我的代码如下所示:
data htree a = Leaf a | Fork (htree a) (htree a) deriving (Show, Eq)
encode :: htree a -> [(a, [Bool])]
encode (Leaf a) = [(a, ????)]
我知道这没什么大不了的。我已经确定了基本情况,即每当你到达一片叶子时,你返回存储在叶子上的符号,以及你到达那里的路径。左为假,右为真。我不确定如何将所有这些信息放在一起以继续我的代码。我会很感激这里的任何指导。
【问题讨论】:
-
您选择了一个相当重要的示例来了解递归的工作原理。尝试遍历列表。
-
我认为实际上我非常了解如何遍历列表,并且已经编写了很多带有列表的函数。我掌握了这种思维的基础,但我无法将其应用于任何事情,这令人沮丧。
-
there aren't a lot of online resources是否有您认为最有帮助的特定类型的资源?很多人推荐“Learn you a Haskell”。它是在线免费的。这是关于递归的章节:learnyouahaskell.com/recursion
标签: haskell functional-programming huffman-code