2014-12-18 82 views

回答

12

最簡單的方法是使用filter和lambda:filter (\ (a, b) -> a == b) ls

你也可以很可愛,並使用uncurry,它將兩個參數的正常函數轉換爲一個元組,給你filter (uncurry (==))。請記住,(==)只是Eq a => a -> a -> Bool類型的函數,因此uncurry (==)Eq a => (a, a) -> Bool類型的函數,這正是您要查找的內容。

+0

非常好,謝謝 – user4357505

+1

@cockmagic:如果這個答案解決了你的問題,你可以通過在投票箭頭下面的複選標記來接受它,這將標記爲已解決的問題。 –

+1

一個警告字,'let filterEquals = filter(uncurry(==))'默認爲類型'[((),())] - > [((),())]''這是不兼容的列表,所以如果還沒有的話,必須提供類型簽名。 –

4

你可以通過遍歷的做到這一點:

doubles ls = [(x,y) | (x,y) <- ls, x==y]