gpt4 book ai didi

haskell - 访问 Haskell 函数中的命名字段

转载 作者:行者123 更新时间:2023-12-02 16:29:32 24 4
gpt4 key购买 nike

我在 Haskell 中定义了一个 Tree 数据类型和一个关联的“size”方法,用于计算树中元素的数量。这以前有效,但是我已经更新了树数据类型以使用命名字段,如以下定义所示:

data Tree a = Empty
| Leaf {value::a}
| Node {left :: (Tree a), value :: a, right :: (Tree a)}
deriving (Eq, Ord, Show)

我发现(通过在 GHCi 中尝试)我可以使用函数(左 n)访问命名字段。但是,当我尝试使用此功能时,出现错误:

size :: Tree a -> Int
size Empty = 0
size (Leaf l) = 1
size (Node n) = size (left n) + 1 + size (right n)

GHCi 简单地表示“不在范围内:左侧”以及右侧的等效内容。 Tree 定义位于名为 Tree 的模块中,大小定义位于名为 Main 的模块中,但对于非命名字段,在从 Tree 数据类型访问变量时,我从未遇到过范围问题。

最佳答案

您的大小(节点n)模式需要有一个正确的构造函数。在您的代码中,n 提取左侧元素。

试试这个(如果你真的想使用命名模式):

size n@(Node _ _ _)   = size (left n) + 1 + size (right n)

或者甚至:

size n@(Node {})   = size (left n) + 1 + size (right n)

或者您可以提取模式中的标签:

size (Node {left=l, right=r})   = size l + 1 + size r

或者直接忽略标签:

size (Node l _ r)   = size l + 1 + size r

关于haskell - 访问 Haskell 函数中的命名字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2228873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com