[英]Returning Doubles in haskell
現在,我要做的是編寫另一個函數,triangle_areas(在此注意使用復數),該函數接受一個Doubles列表,將每個連續的三個Doubles組視為一個三角形的三個邊的長度,使用triangle_area計算其面積; 在處理列表中的所有Doubles之后,將所有計算出的區域作為Doubles列表返回。
到目前為止,這是我的代碼。
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 = []
使用模式匹配來獲取輸入的前三個元素,然后遞歸。 如果您假設始終使用長度為3的倍數的列表來調用triangle_areas
這是最簡單的。
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"
還有其他。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.