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

Bab*_*ham 0 haskell types recursive-datastructures algebraic-data-types

我已经按照指南创建了一个使用以下数据类型的二叉搜索树:

data BinarySearchTree a = EmptyTree | TreeNode a (BinarySearchTree a) (BinarySearchTree a) deriving (Show, Read, Eq)
Run Code Online (Sandbox Code Playgroud)

我是否正确地说'TreeNode'正在使用递归,即创建自己数据类型的2个元素'(BinarySearchTree a)(BinarySearchTree a)'?

我从来没有见过像这样的数据类型,任何简短的解释都会很棒!

lje*_*drz 5

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

我推荐了一个相关的章节来学习你是一个很好的Haskell - 它非常适合初学者.它也描述了您的确切情况:

这就是我们要说的:树是一棵空树,或者是一个包含一些价值和两棵树的元素.听起来非常适合代数数据类型!