我已經在Haskell中聽到'列表差異'(\\)
運算符這個術語,但仍然不太瞭解如何解決它。任何示例或想法?似乎無法讓我的頭繞着'列表差異'(\)運算符
4
A
回答
7
簡而言之,它需要兩個列表,通過第二個列表並且對於每個項目,從第一個列表中刪除相同項目的第一個實例。
> [1..10] \\ [2, 3, 5, 8]
[1,4,6,7,9,10]
> [1, 2, 1, 2, 1, 2] \\ [2]
[1,1,2,1,2]
> [1, 2, 1, 2, 1, 2] \\ [2, 2]
[1,1,1,2]
> [1, 2, 1, 2, 1, 2] \\ [2, 2, 1]
[1,1,2]
0
假設,你有一個東西的列表,例如城市。讓我們拿這個清單爲例:
a = ["London","Brussels","Tokio","Los Angeles","Berlin","Beijing"]
現在你想要刪除所有在歐洲的城市。要知道,這些城市都在歐洲:
b = ["Glasgow","Paris","Bern","London","Madrid","Amsterdam","Berlin","Brussels"]
要獲得a
城市,不在歐洲,所以不在b
的列表,你可以使用(\\)
:
a \\ b = ["Tokio","Los Angeles","Beijing"]
9
的(\\)
operator(和the difference
function)實現set difference,所以,如果你有兩個列表,a
和b
,它只返回那些未b
那些a
元素,如圖所示:
2
xs \\ ys
是所有在xs
不在ys
的元素。也許一個列表解析會澄清這一點:
xs \\ ys = [ x | x <- xs, x `notElem` ys ]
,或者,如果你能做到這一點在Haskell,
xs \\ ys = [ x | x `elem` xs, x `notElem` ys ]
這來自set theory的set difference。基本的想法是你正在「減去」另一個元素的集合,因此術語「差異」。
+0
如果我有這樣的聲明:diff ::(Eq a)=> [a] - > [a] - > [a]我想找出2個列表之間的區別?我應該如何繼續? – Madalina 2017-05-11 14:39:58
相關問題
- 1. C#:似乎無法將我的頭圍繞編譯錯誤
- 2. 我似乎無法讓我的頭在c#中的Lambdas附近#
- 3. 似乎無法讓我的列表視圖從按鈕打開
- 4. 似乎無法讓我的jQuery工作
- 5. 我似乎無法讓.indexOf()爲我的字符數組工作
- 6. 我似乎無法讓css first_child工作
- 7. 似乎無法讓我的可執行文件庫運行
- 8. 我似乎無法讓我的Javascript表單驗證工作
- 9. 讓我的頭繞着django模型關係,表單和jquery
- 10. 我似乎無法運行ngAnimate?
- 11. 我似乎無法在Eclipse中運行
- 12. PHP包含運算符似乎無法找到php腳本
- 13. 着色一個asp:按鈕 - 似乎無法讓它工作
- 14. Ruby運算符差異
- 15. 的Javascript:我似乎無法
- 16. 似乎無法獲得差異變量的ACF R
- 17. 運算符「==」和「=」之間的差異運算符「==」和「=」之間的差異「==」和「=」
- 18. 似乎無法讓CakePHP的AuthComponent工作
- 19. WPF狀態欄更新 - 幫助,我似乎圍繞着圈
- 20. 似乎無法獲取列表()工作
- 21. 似乎無法讓我的導航欄旁邊,我的標誌
- 22. 我似乎無法居中此表
- 23. ,我似乎無法修復
- 24. 我似乎無法從PLSQL
- 25. 我似乎無法從MySQL
- 26. 我似乎無法讓Java讀取我的文本文檔
- 27. 我似乎無法讓我的代碼工作
- 28. 似乎無法讓我的方法(在Java中)正確編譯
- 29. 似乎無法計算正確的值
- 30. PHP - 似乎無法從表
如何做到這一點沒有差異運算符? – matthias 2016-01-01 21:29:37
@matthias您可以將'(\\)'實現爲'a \\ b = filter(不是。flip elem b)a'。 – fuz 2016-01-01 21:32:32
對不起還有一件事...你可以寫非點免費的嗎? – matthias 2016-01-01 22:16:37