2013-10-07 85 views
0

是否有任何簡單的方法將[[int]]更改爲[int],或者以此格式比較它們以確定是否缺少元素。basic haskell:將[[int]]轉換爲[int]

例如

set1= [[1,2,3]] 
    set2= [2,3,] 

返回[1]。我嘗試這樣做:

return s1 s2= [x|x<-s1,y<-s2, x/=y] 

後續問題: 我怎麼能防止重複返回 例如,如果

set1 = [[1,1,1,2,3] 

我怎樣才能得到回報功能給我唯一的[1]

+0

這真的是你想要的嗎? 「我怎樣才能得到返回函數只給我[1]」而不是[1,2,3] –

+1

這些是這裏的幾個單獨的問題。我不確定有什麼問題?如何刪除重複項?如何找到兩個列表之間的區別?如何將列表的列表轉換爲int? –

+0

順便說一句,你不能結束清單聲明與昏迷在set2上面 –

回答

1

似乎有大約這裏三個不同的問題。

第一個問題,如何將int列表轉換爲列表?

concat [[1,1,2],[2,1,3]] == [1,1,2,2,1,3] 

第二個問題,如何從列表中刪除重複?您可以使用nub爲(記得import Data.List):

nub [1,2,1,3] == [1,2,3] 

也許你只是想刪除連續重複?例如,如果你知道你已經排序列表:

map head (group [1,1,1,2,3]) == [1,2,3] 

在這方面,group將它們組合成連續的重複的名單,然後head來只返回第一個每組重複的。

第三個問題,如何找到列表1中屬於項目在列表2:

list1 \\ list2

不過要小心,如預期,如果列表AREN」 \\可能無法運行如果任何一個列表包含模糊的話。如果你想了解它在這些情況下的行爲,請仔細閱讀。

+0

我可能不應該包含這三個答案!這三個問題應該是關於SO的單獨問題。 –

+0

是的,就像他添加了越來越多的問題:D –

3

如果您有[[1,2,3]],您可以使用concat

Prelude> x 
[[1,2,3]] 
Prelude> concat x 
[1,2,3] 
Prelude> 

對於第二部分,我請你閱讀本Algorithm - How to delete duplicate elements in a Haskell list

有一個直截了當的實現存在。

+2

爲什麼不只是「頭」呢? – fjarri

+0

完美!謝謝,但無論如何,我可以防止我的代碼中的重複被返回?例如,如果set1中有兩個,我可以阻止兩個1被返回嗎? – John

+0

@Bogdan頭會在這種情況下工作,但如果set1是[2,3,1]或[2,1,3]它不會。 – John

0

使用concat轉換從[[a]][a],並nub(從Data.List)刪除從列表中重複的元素。

示威ghci的:

> import Data.List (nub) 
> let set1 = [[1,2,3]] 
> let set2 = [2,3] 
> concat set1 == set2 
False 
> let set1 = [[1,1,1,2,3]] 
> nub (concat set1) 
[1,2,3]