Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 编写函数以计算树的左脊椎_Haskell - Fatal编程技术网

Haskell 编写函数以计算树的左脊椎

Haskell 编写函数以计算树的左脊椎,haskell,Haskell,我需要一些帮助来弄清楚如何在Haskell中创建leftSpine函数。 基本上,它应该将所有最左边的叶子放入一个列表中,但每当我运行代码时,我都会得到一个空列表。任何帮助都将不胜感激 这是我的密码 data Tree x = Leaf | Node (Tree x) x (Tree x) deriving Show leftSpine :: Tree x -> [x] leftSpine Leaf = [] leftSpine (Node lt x rt) = (leftSp

我需要一些帮助来弄清楚如何在Haskell中创建
leftSpine
函数。 基本上,它应该将所有最左边的叶子放入一个列表中,但每当我运行代码时,我都会得到一个空列表。任何帮助都将不胜感激

这是我的密码

data Tree x = Leaf | Node (Tree x) x (Tree x)
    deriving Show

leftSpine :: Tree x -> [x]
leftSpine Leaf  = []
leftSpine (Node lt x rt) = (leftSpine lt)
这是我用来测试它的代码

leftSpine (Node (Node (Node Leaf 1 Leaf) 2 (Node Leaf 3 Leaf))
                4
                (Node (Node Leaf 5 Leaf) 6 (Node Leaf 7 Leaf)))
它应该等于
[4,2,1]
,但它只是作为
[]
出现

leftSpine :: Tree x -> [x]
leftSpine   Leaf  = []
leftSpine   (Node lt x rt) =  x:leftSpine lt
你实际上没有把任何东西列入清单。区别在于
x:leftSpine lt
而不是
leftSpine lt


你实际上没有把任何东西列入清单。不同之处在于
x:leftSpine lt
而不是
leftSpine lt

您的代码清楚地表明结果总是空列表

第一种情况是叶子的左脊柱是空列表。好的,到目前为止

第二种情况是,节点的左脊椎正好是节点左子节点的左脊椎

因此,如果我们想找到树的左脊椎,我们只需继续追踪我们到达的节点的左子节点,知道答案与下一个左子节点的左脊椎完全相等。要么我们最终找到一片叶子,结果是空列表,要么树是无限的,我们根本不返回结果。您的代码中没有任何内容可以返回任何其他内容


编写此类递归函数的关键是找出基本情况(
Leaf
,此处)的答案,然后对于非基本情况(
节点
,此处),您需要找出如何将子解决方案与本地信息相结合,以生成完整的解决方案


在这种情况下,
叶的左脊柱很容易,因为根本没有数据。那么,如何将
节点lt x rt
中的信息与
leftSpine lt
结合起来,以获得整个树的左脊椎?

您的代码清楚地表明,结果总是空列表

第一种情况是叶子的左脊柱是空列表。好的,到目前为止

第二种情况是,节点的左脊椎正好是节点左子节点的左脊椎

因此,如果我们想找到树的左脊椎,我们只需继续追踪我们到达的节点的左子节点,知道答案与下一个左子节点的左脊椎完全相等。要么我们最终找到一片叶子,结果是空列表,要么树是无限的,我们根本不返回结果。您的代码中没有任何内容可以返回任何其他内容


编写此类递归函数的关键是找出基本情况(
Leaf
,此处)的答案,然后对于非基本情况(
节点
,此处),您需要找出如何将子解决方案与本地信息相结合,以生成完整的解决方案


在这种情况下,
叶的左脊柱很容易,因为根本没有数据。那么,您如何将
节点lt x rt
的信息与
左脊椎lt
结合起来,以获得整个树的左脊椎?

我不敢相信我看不到!!我做了更改,运行了代码,它工作得非常好。非常感谢!这发生在我们所有人身上。别担心,我真不敢相信我看不到!!我做了更改,运行了代码,它工作得非常好。非常感谢!这发生在我们所有人身上。别担心。