2016-12-05 77 views
1

我是Haskell的初學者,這是一個任務的問題。 我幾乎完成了這個問題,但我無法弄清楚如何去除圍繞我計算的元組的圓括號。Haskell刪除一個元組的括號

get_balance_partition :: Int -> [([Int], [Int])] -> (Int, ([Int], [Int])) 
get_balance_partition min (x:xs) 
    | null xs && difference_partitions x == min = (min, x) 
    | null xs = (min, ([], [])) 
    | difference_partitions x == min = (min, x) 
    | otherwise = get_balance_partition min xs 

這是工作代碼的輔助功能,我用它是這樣的:

get_balance_partition 2 (two_partitions [7, 4, 3, 6, 10]) 

output : (2,([7,4,3],[6,10])) 

我想擺脫周圍一對分區的,這樣的結果括號的,

(2,([7,4,3],[6,10])) 

看起來像

(2,[7,4,3],[6,10]) 

當一對分區存儲在x中時,我該如何擺脫括號?

回答

4

沒有標準函數可用於三元組,您必須親自編寫它們。

munge :: (a,(b,c)) -> (a,b,c) 
munge (x,(y,z)) = (x,y,z) 

munge (get_balance_partition 2 (two_partitions [7, 4, 3, 6, 10])) 

或匿名的拉姆達

(\(x,(y,z)) -> (x,y,z)) (get_balance_partition 2 (two_partitions [7, 4, 3, 6, 10])) 

另一種方法是修改您的定義,以匹配列表中的元組直接:

get_balance_partition :: Int -> [([Int], [Int])] -> (Int, ([Int], [Int])) 
get_balance_partition min ((x,y):xs) 
    ... 

而且使用(x,y)代替x無處不在,那麼你可以返回例如在第一種情況下爲(min, x, y),在其他情況下也是如此。

+0

你打我吧 – epsilonhalbe

+0

非常感謝,沒想到簡單地把x改成(x,y)。當計時器讓我時,我會接受你的答案。 –