gpt4 book ai didi

haskell - 在haskell中为数据类型定义特殊的Ord

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

我只是不知道如何在 haskell 中为我的数据类型实现特殊的 ord。我在论坛上读到,它应该看起来像这样:

import Data.Set

data Cord = Cord { x :: Int
, y :: Int} deriving (Eq,Ord)

instance Eq Cord where
(Cord a b) == (Cord a b) = (a==c and b==d)

instance Ord Cord where
compare (Cord a b) (Cord c d) = if a==c then compare (b d) else compare(a c)

我想创建一个包含 2 个整数的简单类型,如果第一个数字大于另一个整数,则一个大于另一个,如果第一个数字相等,则第二个整数大于。我知道可以通过创建 2 个整数的列表来完成此比较,但是我不需要一些更复杂的数据类型,并且无法在任何地方找到如何使用 if-s 和递归定义 ord 的指南。

感谢您的回答!

最佳答案

我认为您真正的问题是您使用了deriving (Eq, Ord),这意味着您已经拥有Ord的派生类型类实例。如果你删除它并使用你的比较,看起来不错:

data Cord = Cord { x :: Int, y :: Int }
deriving (Eq, Show)

instance Ord Cord where
compare (Cord a b) (Cord c d) = if a == c then compare b d else compare a c

在 GHCI 中:

*Main> compare (Cord 4 2) (Cord 9 6)
LT
*Main> compare (Cord 3 2) (Cord 3 0)
GT
*Main> compare (Cord 2 2) (Cord 2 2)
EQ

关于haskell - 在haskell中为数据类型定义特殊的Ord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32907458/

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