我们如何在另一个函数中使用一个函数的结果(Haskell)?

时间:2016-03-15 16:01:40

标签: haskell

在计算面积之前,我想测试一系列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

1 个答案:

答案 0 :(得分:3)

首先,没有必要测试一个布尔值来返回TrueFalse:只返回布尔值!

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和乘法符号*

我们需要在第一种情况下使用JustFloat变为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以遵循惯例。