我想使用坐标列表[Haskell]

问题描述 投票:0回答:1

所以我需要使用坐标列表,我已经创建了这样的类型:

type Pont = (Float, Float)

而且我需要返回从我得到的点计算出来的浮点列表。我到目前为止所做的:

szamol :: Pont -> Float
szamol 0.0 = 0.0
szamol (x,y) = 10^(1/2)*((x^2)+(y^2))

ossz :: [Pont] -> [Pont]
ossz [] = []
ossz (h,t) = szamol h ++ ossz t

它给我这个错误:

ERROR "Hazi.hs":6 - Cannot justify constraints in explicitly typed binding
*** Expression    : szamol
*** Type          : Pont -> Float
*** Given context : ()
*** Constraints   : (Integral a, Fractional a)
haskell coordinates haskell-stack hugs
1个回答
0
投票

[中的模式0.0

szamol 0.0 = 0.0

没有道理。PontPointFloat的2元组,而不是单个Float,因此您可以将其定义为:

szamol :: Pont -> Float
szamol (0.0, 0.0) = 0.0
szamol (x,y) = 10^(1/2)*((x^2)+(y^2))

使用10^(1/2)将失败,因为^运算符希望第二个操作数属于Integral类型类的成员。您可以使用10**(1/2)

使用10**(1/2)将为您提供10的平方根(约为3.16,并且不会计算平方和的平方根。

因此,您可能想使用:

szamol :: Pont -> Float
szamol (0.0, 0.0) = 0.0
szamol (x,y) = sqrt (x*x + y*y)

ossz函数中,您犯了三个错误:

  1. 返回类型在此处应为Float
  2. 您总结为(+),而不是(++)
  3. 列表“ cons”的数据构造函数是(:),而不是(,)
ossz :: [Pont] -> Float
ossz [] = []
ossz (h : t) = szamol h + ossz t

这里最好使用sum :: (Foldable t, Num a) => t a -> asum :: (Foldable t, Num a) => t a -> a的组合:

map :: (a -> b) -> [a] -> [b]
© www.soinside.com 2019 - 2024. All rights reserved.