gpt4 book ai didi

haskell - 我们自己的数据类型的最大值

转载 作者:行者123 更新时间:2023-12-05 08:14:48 26 4
gpt4 key购买 nike

假设我在 haskell 中创建了自己的数据类型:

data List a = ListNode a (List a) | ListEnd

我怎样才能实现一个自定义的最大值函数来找到列表的最大值,例如:

 mymaximum (ListNode 10 ListEnd)

应该返回 10

mymaximum (ListNode 20 (ListNode 10 ListEnd)) 

将返回 20

最佳答案

可以定义一个递归函数:

myMaximum :: Ord a => List a -> a
myMaximum (ListNode a ListEnd) = a
myMaximum (ListNode a b) = max a (myMaximum b)

但是,更简洁的解决方案将重用 Haskell 现有的 maximum function而不是定义你自己的:

最大::forall a 。 (可折叠 t, Ord a) => t a -> a

为此,您需要为 List 定义(或者,正如其他评论者指出的那样,派生)一个 Foldable 实例,例如:

instance Foldable List where
foldMap f ListEnd = undefined
foldMap f (ListNode x ListEnd) = undefined
foldMap f (ListNode x r ) = undefined

...一旦完成,将允许您在 List 上调用 maximum:

λ> maximum (ListNode 20 (ListNode 10 ListEnd))
20

关于haskell - 我们自己的数据类型的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62188885/

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