【问题标题】:Haskell accessing fields in custom data typesHaskell 访问自定义数据类型中的字段
【发布时间】:2014-11-20 22:32:21
【问题描述】:

对于一个作业,我必须为自定义数据类型树(如下定义)实现不同的功能

我想使用错误函数getNodeValue 访问我的树根节点的“标签”(节点值)。对于如何做到这一点,我将不胜感激!

data Tree = Node (Label -> Label) Label [Tree]
type Label = Int

testTree = Node (+1) 0 [Node (+1) 1 [], Node (+1) 2 [], Node (+1) 3 []]

getNodeValue :: Tree -> Label
getNodeValue t = {... how does I custom types? ...}

【问题讨论】:

    标签: haskell tree custom-data-type


    【解决方案1】:

    我认为您想在此处使用模式匹配来“查看”Tree 数据类型内部。要获取所提供树的根节点的值,您必须执行以下操作:

    getNodeValue :: Tree -> Label
    getNodeValue (Node _ l _) = l
    

    【讨论】:

    • 感谢我正在寻找的东西!我想它会是这样的,但我不知道我也必须传递一个构造函数调用。为了正确起见,(Tree _ l _)实际上应该是(Node _ l _)。
    • 是的,之前改过。不过还是谢谢。
    【解决方案2】:

    如果允许更改类型定义,也可以使用记录语法自动生成访问器:

    data Tree = Node
        { getUpdater :: (Label -> Label)
        , getNodeValue :: Label
        , getSubnodes :: [Tree]
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多