Haskell-使用递归的代数数据类型?

Haskell-使用递归的代数数据类型?,haskell,types,algebraic-data-types,recursive-datastructures,Haskell,Types,Algebraic Data Types,Recursive Datastructures,我遵循了创建使用以下数据类型的二进制搜索树的指南: data BinarySearchTree a = EmptyTree | TreeNode a (BinarySearchTree a) (BinarySearchTree a) deriving (Show, Read, Eq) 我说“TreeNode”使用递归,即创建2个自己数据类型的元素(BinarySearchTree a)(BinarySearchTree a),对吗 我从未见过这样的数据类型,任何简短的解释都会很棒 是的,这是一

我遵循了创建使用以下数据类型的二进制搜索树的指南:

data BinarySearchTree a = EmptyTree | TreeNode a (BinarySearchTree a) (BinarySearchTree a) deriving (Show, Read, Eq)
我说“TreeNode”使用递归,即创建2个自己数据类型的元素(BinarySearchTree a)(BinarySearchTree a),对吗


我从未见过这样的数据类型,任何简短的解释都会很棒

是的,这是一种递归数据类型

我推荐中的相关章节-它对初学者非常友好。它也描述了您的具体情况:

我们要说的是:一棵树要么是空的,要么是空的 包含一些值和两棵树的元素。听起来像是 非常适合代数数据类型


是的,这是一种递归数据类型

我推荐中的相关章节-它对初学者非常友好。它也描述了您的具体情况:

我们要说的是:一棵树要么是空的,要么是空的 包含一些值和两棵树的元素。听起来像是 非常适合代数数据类型


它与列表类型(也是递归的)非常相似,只是它递归两次(树中一个节点的两个分支)而不是一次(在列表中,一个单元格只有一个尾部)。从技术上讲,
TreeNode
接受两个
BinarySearchTree
值(和一个
a
值)并返回一个新的
BinarySearchTree
值。该类型是递归定义的。TreeNode不创建任何内容。它与列表类型(也是递归的)非常相似,只是它递归两次(树中节点的两个分支),而不是一次(在列表中,单元格只有一个尾部)。从技术上讲,
TreeNode
接受两个
BinarySearchTree
值(和
a
值)并返回新的
BinarySearchTree
值。该类型是递归定义的。TreeNode不创建任何内容。