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

时间:2018-01-03 20:33:16

标签: haskell

我对haskell很新,需要针对我正在处理的问题使用特定的数据类型。

etRaportGreutate

所以,当我创建一个例如Node [Leaf 1,Leaf2,Leaf 3]的实例时,如何访问这些?它不会让我使用头部或尾部或索引!!

1 个答案:

答案 0 :(得分:4)

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

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以获取 i -th子项。但请注意,(!!) :: [a] -> Int -> a通常是一种反模式:它不安全,因为我们无法保证列表包含足够的元素,并且使用length也是一种反模式,因为列表可以有无限长度,所以我们不能做这样的绑定检查。

通常,如果在Haskell中编写算法,则会倾向于使用线性访问,并编写 total 函数:总是返回某些函数的函数。