Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们如何在另一个函数中使用一个函数的结果(Haskell)?_Haskell - Fatal编程技术网

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

我们如何在另一个函数中使用一个函数的结果(Haskell)?,haskell,Haskell,在计算面积之前,我想测试一系列的3个输入是否可以一起形成一个三角形 为了看它们是否能形成三角形,我有: 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 = Fals

在计算面积之前,我想测试一系列的3个输入是否可以一起形成一个三角形

为了看它们是否能形成三角形,我有:

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
但它返回错误:

Solution.hs:8:31: Not in scope: ‘a’

Solution.hs:8:36: Not in scope: ‘b’

Solution.hs:8:41: Not in scope: ‘c’

Solution.hs:10:19: Not in scope: ‘a’

Solution.hs:10:21: Not in scope: ‘b’

Solution.hs:10:23: Not in scope: ‘c’

首先,不需要为了返回
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
然后,对于另一个函数:

我们必须添加参数
abc
,以及乘法符号
*

在第一种情况下,我们需要使用
Just
浮点
转换为
可能浮点

test
需要它的三个参数

此外,检查
boolean==True
也没有意义——只需使用boolean

最后,为什么要使用
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
。考虑将您的函数重命名为<代码> AraOfField,遵循惯例。

有很多错误。code>sqrt(s(s-a)(s-b)(s-c))是无效语法。三角形的
区域类型错误
area\u of_triangle
没有参数,但您尝试命名它们。将一个函数与一个布尔值进行比较。把你的代码分成小块,让它们单独工作。@SebastianRedl:严格来说,这不是无效的语法,它只需要一个完全虚假的
s
@leftaroundabout Can
s(s-a)
真的被输入了吗?@chi:
类BogusS a,其中s::a
实例BogusS Int
实例BogusS(Int->Int)
就可以了。@leftaroundabout呃,对<代码>s::a;s=s
也可以工作。谢谢。我们还可以考虑将<代码>测试<代码>作为一个单独的函数,或者至少使它成为本地代码,以<代码> > AcaOffic < < />代码>。在这个特定的例子中,我只需输入条件。另一个要考虑的是生成一个三角形类型(<代码>数据三角形=三{a::浮标,b::浮标,c::浮标}/COD>),然后创建一个。