2016-12-05 3 views
1

私はハスケルの初心者です。これは課題の質問です。 私はかなり問題を抱えていますが、私が計算したタプルを囲んでいる括弧を取り除く方法を理解できません。私は結果ように、パーティションのペアを囲む括弧を取り除きたいハスケルはタプルの括弧を削除します

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

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

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 

これは動作するコードのためのヘルパー関数であり、私はこのようにそれを使用

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

(2,[7,4,3],[6,10]) 
のように見えます

xにパーティションのペアが格納されているときに、どのようにかっこを取り除くことができますか?

答えて

4

トリプルで動作する標準的な関数はありません。自分で記述する必要があります。ラムダ

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

として

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])) 

または匿名でもう一つの方法は、直接リストにタプルに一致させるために、あなたの定義を変更することです:

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

どこでも(x,y)の代わりxを使用、次に返すことができます第1の場合は(min, x, y)、その他の場合は同様である。

+0

あなたはそれに私を打ちました – epsilonhalbe

+0

ありがとう、たくさんありましたが、単純にxを(x、y)に変更したとは思いませんでした。タイマーで私の答えを受け入れるよ。 –

関連する問題