首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在haskell中返回Double

问在haskell中返回Double
EN

Stack Overflow用户
提问于 2016-04-03 23:21:48
回答 1查看 439关注 0票数 1

现在我要做的是编写另一个函数,triangle_areas (注意这里的复数用法),它接受一个双精度列表,将每组连续的三个双精度视为三角形三条边的长度,使用triangle_area计算其面积;在处理列表中的所有双精度后,将所有计算的面积作为双精度列表返回。

到目前为止,这是我的代码。

代码语言:javascript
复制
triangle_area :: Double -> Double -> Double -> Double
triangle_area a b c = sqrt (s * (s - a) * (s - b) * (s - c))
    where s = (a + b + c) / 2.0

triangle_areas :: [Double] -> [Double]
triangle_areas xs = []
EN

回答 1

Stack Overflow用户

发布于 2016-04-03 23:38:11

使用模式匹配来获取输入的前三个元素,然后使用递归。假设调用triangle_areas时总是使用长度为3的倍数的列表,这是最简单的。

代码语言:javascript
复制
triangle_areas :: [Double] -> [Double]
triangle_areas [] = []
triangle_areas (a:b:c:xs) = triangle_area a b c : triangle_areas xs

对于有一两个额外元素的列表,有很多选择。一种是干脆忽略它们。

代码语言:javascript
复制
-- Case 3
triangle_areas _ = []

另一种方法是简单地返回错误

代码语言:javascript
复制
-- Case 3
triangle_areas _ = error "Incomplete final set"

另一种方法是返回一个Either值

代码语言:javascript
复制
triangle_areas :: [Double] -> Either String [Double]
triangle_areas [] = Right []
triangle_areas (a:b:c:xs) = Right $ triangle_area a b c : triangle_areas xs
triangle_areas _ = Left "Incomplete final set"

还有其他的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36387272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档