所以我需要使用坐标列表,我已经创建了这样的类型:
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)
[中的模式0.0
:
szamol 0.0 = 0.0
没有道理。Pont
Point
是Float
的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
函数中,您犯了三个错误:
Float
;(+)
,而不是(++)
和(:)
,而不是(,)
:ossz :: [Pont] -> Float
ossz [] = []
ossz (h : t) = szamol h + ossz t
这里最好使用sum :: (Foldable t, Num a) => t a -> a
和sum :: (Foldable t, Num a) => t a -> a
的组合:
map :: (a -> b) -> [a] -> [b]