Haskell将有序列表转换为平衡树~代码说明

Haskell将有序列表转换为平衡树~代码说明,haskell,Haskell,我有以下练习: 定义函数list2tree,该函数将给定的有序列表转换为平衡树–此树的任何节点的右子树和左子树的高度最多相差1 有人能解释一下这个代码以及它是如何工作的吗?另外,如何在控制台中测试树 解决方案: 这个函数的作用是将列表中的中间元素作为节点,然后对列表的每一半进行递归m是中间元素的位置,ltx(我相信它的意思是“低于x”)是所有低于x的元素,x和gtx是所有高于x的元素。此函数的作用是将中间元素放在列表中,将其作为节点,然后对列表的每一半进行递归m是中间元素的位置,ltx(我相信它

我有以下练习:

定义函数list2tree,该函数将给定的有序列表转换为平衡树–此树的任何节点的右子树和左子树的高度最多相差1

有人能解释一下这个代码以及它是如何工作的吗?另外,如何在控制台中测试树

解决方案:


这个函数的作用是将列表中的中间元素作为节点,然后对列表的每一半进行递归
m
是中间元素的位置,
ltx
(我相信它的意思是“低于x”)是所有低于x的元素,
x
gtx
是所有高于x的元素。

此函数的作用是将中间元素放在列表中,将其作为节点,然后对列表的每一半进行递归
m
是中间元素的位置,
ltx
(我相信它的意思是“低于x”)是所有低于
x
的元素,
gtx
是所有高于x的元素。

为了在GHCI中进行测试,将
作为
Show
的一个实例:

data Tree a = Leaf a
          | Node a (Tree a) (Tree a)
          | Null
          deriving (Show)
从命令行启动GHCI,并加载包含
Tree
list2tree
的文件。我叫它
4452938.hs

Prelude> :load 44520938.hs
[1 of 1] Compiling Answer           ( 44520938.hs, interpreted )
Ok, modules loaded: Answer.
现在,您可以使用各种输入列表调用函数进行测试:

*Answer> list2tree []
Null
*Answer> list2tree [1]
Leaf 1
*Answer> list2tree [1, 2]
Node 2 (Leaf 1) Null
*Answer> list2tree [1, 2, 3]
Node 2 (Leaf 1) (Leaf 3)

为了在GHCI中进行测试,将
作为
显示
的实例:

data Tree a = Leaf a
          | Node a (Tree a) (Tree a)
          | Null
          deriving (Show)
从命令行启动GHCI,并加载包含
Tree
list2tree
的文件。我叫它
4452938.hs

Prelude> :load 44520938.hs
[1 of 1] Compiling Answer           ( 44520938.hs, interpreted )
Ok, modules loaded: Answer.
现在,您可以使用各种输入列表调用函数进行测试:

*Answer> list2tree []
Null
*Answer> list2tree [1]
Leaf 1
*Answer> list2tree [1, 2]
Node 2 (Leaf 1) Null
*Answer> list2tree [1, 2, 3]
Node 2 (Leaf 1) (Leaf 3)

关于代码,您到底不了解什么?到目前为止,您尝试了什么?对于代码,您到底不了解什么?到目前为止,您尝试了什么?在哪里之后,我无法理解这段代码是如何工作的,我需要记住这个测试练习。但是理解它是如何工作的是很重要的。在哪里,我不能理解这个代码是如何工作的,我需要记住这个测试练习。但了解它的工作原理很重要