繁体   English   中英

访问Haskell自定义数据类型中的值

[英]Accessing values in haskell custom data type

我对Haskell还是很陌生,需要针对我正在解决的问题使用特定的数据类型。

data Tree a = Leaf a | Node [Tree a]
deriving (Show, Eq)

因此,当我创建一个实例时,例如Node [Leaf 1,Leaf2,Leaf 3],我该如何访问它们? 它不会让我用头或尾或将索引与!!

您执行模式匹配 例如,如果您想要第一个孩子,则可以使用:

firstChild :: Tree a -> Maybe (Tree a)
firstChild (Node (h:_)) = Just h
firstChild _ = Nothing

在这里,我们将答案包装成Maybe类型,因为有可能我们处理Leaf xNode [] ,从而没有第一个孩子。

或者我们可以通过以下方式获得第i个项目:

iThChild :: Int -> Tree a -> Tree a
iThChild i (Node cs) = cs !! i

因此,这里我们展开Node构造函数,获取子项cs的列表,然后执行cs !! i cs !! i获得第i个孩子。 但是请注意(!!) :: [a] -> Int -> a通常有点反模式:这是不安全的,因为我们不能保证列表包含足够的元素,并且使用length是反模式-pattern也是如此,因为列表可以有无限长,所以我们不能进行这种绑定检查。

通常,如果有人用Haskell编写算法,则倾向于利用线性访问并编写全部函数:总是返回某些内容的函数。

暂无
暂无

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

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