在计算面积之前,我想测试一系列3个输入是否可以一起形成三角形。
看看他们是否可以形成一个三角形:
gem
计算我所拥有的区域:
test :: Float -> Float -> Float -> Bool
test a b c
| a>0 && b>0 && c>0 && a+b>c && c+b>a &&c+a > b= True
| otherwise = False
我想也许这样的事情会起作用:
sqrt(s(s-a)(s-b)(s-c))
where s= (a+b+c)/2
但它返回错误:
area_of_triangle :: Float -> Float -> Float -> Bool-> Maybe Float
area_of_triangle
| test== True = sqrt(s(s-a)(s-b)(s-c))
| True = Nothing
where s= (a+b+c)/2
答案 0 :(得分:3)
首先,没有必要测试一个布尔值来返回True
或False
:只返回布尔值!
test :: Float -> Float -> Float -> Bool
test a b c = a>0 && b>0 && c>0 && a+b>c && c+b>a && c+a>b
然后,对于另一个功能:
我们必须添加参数a b c
和乘法符号*
。
我们需要在第一种情况下使用Just
将Float
变为Maybe Float
。
test
需要它的三个论点。
此外,检查boolean == True
是否只是使用布尔值是没有意义的!
最后,为什么Bool
参数?我们不需要 - 让我们删除它。
area_of_triangle :: Float -> Float -> Float -> Maybe Float
area_of_triangle a b c
| test a b c = Just (sqrt (s * (s-a) * (s-b) * (s-c)))
| otherwise = Nothing
where s = (a+b+c)/2
在Haskell中使用camelCase
作为函数名是很常见的。考虑将您的函数重命名为areaOfTriangle
以遵循惯例。