簡體   English   中英

在Haskell中返回雙打

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM