简体   繁体   English

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

[英]Haskell - Algebraic data types that use recursion?

I've followed a guide to creating a binary search tree which uses the following datatype: 我遵循了使用以下数据类型创建二进制搜索树的指南:

data BinarySearchTree a = EmptyTree | TreeNode a (BinarySearchTree a) (BinarySearchTree a) deriving (Show, Read, Eq)

Am I correct in saying 'TreeNode' is using recursion, ie creates 2 elements of its own data type '(BinarySearchTree a) (BinarySearchTree a)'? 我是否正确地说'TreeNode'正在使用递归,即创建其自身数据类型'(BinarySearchTree a)(BinarySearchTree a)'的2个元素?

I've never seen a datatype like this, any brief explanation would be great! 我从未见过像这样的数据类型,任何简短的解释都很好!

Yes, this is a recursive data type. 是的,这是一种递归数据类型。

I recommend a relevant chapter in Learn You A Haskell For Great Good - it is very beginner-friendly. 我建议在“ 学习Haskell成就卓越”中推荐相关章节-非常适合初学者。 It describes your exact case, too: 它也描述了您的确切情况:

Here's what we're going to say: a tree is either an empty tree or it's an element that contains some value and two trees. 这就是我们要说的:一棵树要么是一棵空树,要么是一个包含一些值和两棵树的元素。 Sounds like a perfect fit for an algebraic data type! 听起来很适合代数数据类型!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM