2014-12-11 55 views
0

說我有兩個數據類型是這樣的:獲得ID數據類型的元素在Haskell

data DataType1 = DataType1 { id :: Int, values :: [Int]} deriving (Show) 
data DataType2 = DataType2 { dataType1Id :: Int, values2 :: [Int]} deriving (Show) 

現在我想的平均值和相關values2(所以這裏DataType1Id = ID)進行比較。 我在Haskell中很新,所以我不知道這是否可能。

這是我的功能比較平均:

isGreaterAvgThen :: DataType2 -> Bool 
isGreaterAvgThen x 
    | average (values2 x) > average (values y) = True 
    | otherwise = False 
    where y = ... 

平均是計算INTS的列表的平均值的函數(平均:: [INT] - >雙)

+0

當你編譯它時會發生什麼? – jamshidh 2014-12-11 01:01:45

+0

目前沒有什麼,我不知道y =應該在這裏。我有DataType1s的列表,我試圖做DataType1,其中DataType1 =(dataType1Id x)的id。 – Vinny 2014-12-11 01:07:22

+0

你有多少個DataType2?這聽起來像你說你有一個單一的,你需要單從列表中的'DataType1' ....此外,將'DataType1'更好地存儲爲'Data.Map Int [Int]'? – jamshidh 2014-12-11 01:40:35

回答

2

會變成這樣爲你工作?

where y = fromMaybe (error "missing value") $ 
        find ((== id x) . dataType1Id) listOfDataType2 

由於列表可能會缺少所需的價值,find類型被包裹在也許....如果你確信它的存在,你可以用fromMaybe解開它像我一樣,但要警告,error只是另一種說法「崩潰」的方式......

+0

謝謝,工作得很好! – Vinny 2014-12-11 02:39:08