现在我要做的是编写另一个函数,triangle_areas (注意这里的复数用法),它接受一个双精度列表,将每组连续的三个双精度视为三角形三条边的长度,使用triangle_area计算其面积;在处理列表中的所有双精度后,将所有计算的面积作为双精度列表返回。
到目前为止,这是我的代码。
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 = []发布于 2016-04-03 23:38:11
使用模式匹配来获取输入的前三个元素,然后使用递归。假设调用triangle_areas时总是使用长度为3的倍数的列表,这是最简单的。
triangle_areas :: [Double] -> [Double]
triangle_areas [] = []
triangle_areas (a:b:c:xs) = triangle_area a b c : triangle_areas xs对于有一两个额外元素的列表,有很多选择。一种是干脆忽略它们。
-- Case 3
triangle_areas _ = []另一种方法是简单地返回错误
-- Case 3
triangle_areas _ = error "Incomplete final set"另一种方法是返回一个Either值
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"还有其他的。
https://stackoverflow.com/questions/36387272
复制相似问题