gpt4 book ai didi

haskell - 如何使用Pos haskell计算距离

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

假设我定义了这种类型:类型 Pos = (Int, Int)

我想使用上面的类型来计算两点之间的距离,我是这样写的:

type Pos = (Int, Int)
distancee :: Pos -> Pos -> Float
distancee Pos (x1,y1) (x2,y2) = sqrt((dx*dx)+(dy*dy))
where
dx = x2 - x1
dy = y2 - y1

我真的不知道如何使用 Pos,上面的内容也不正确,所以你能告诉我如何解决这个问题吗?

最佳答案

这里有两个问题。第一个是 Point 是 2 元组的类型别名。因此它没有特定的数据构造函数。这意味着 distancee 的头部应该如下所示:

type Pos = (Int, Int)

distancee :: Pos -> Pos -> Float
distancee <strong>(x1,y1)</strong> <strong>(x2,y2)</strong> = …

第二个问题是,两个 Int 相减得到一个 Int,两个 Int 相乘得到一个 Int,将两个 Int 加在一起将产生一个 Int。这是因为(-) :: Num a => a -> a -> a , (*) :: Num a => a -> a -> a ,和(+) :: Num a => a -> a -> a全部都有一个签名,其中两个操作数和结果都具有相同的类型。我们无法申请sqrt :: Floating a => a -> a对于 Int,因为它需要一个属于 Floating 类型类成员的类型。我们可以利用fromIntegral :: (Integral a, Num b) => a -> bIntegral 类型的项目转换为 Num 类型的对象:

distancee :: Pos -> Pos -> Float
distancee (x1,y1) (x2,y2) = sqrt (<strong>fromIntegral</strong> (dx*dx + dy*dy))
where dx = x2 - x1
dy = y2 - y1

关于haskell - 如何使用Pos haskell计算距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70083936/

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