簡體   English   中英

我如何在Haskell中分離元組?

[英]How can i separate tuples in Haskell?

我如何合並一個元組列表而不重復那些元組中的任何項目?

例如 :

從列表[(“ a”,“ b”),(“ c,” d“),(” a“,” b)]中,應返回[“ a”,“ b”,“ c”,“ d“]


所以我得到該代碼的錯誤消息:

No instance for (Eq a0) arising from a use of `nub'
The type variable `a0' is ambiguous
Possible cause: the monomorphism restriction applied to the following:
  merge :: [(a0, a0)] -> [a0] (bound at P.hs:9:1)
Probable fix: give these definition(s) an explicit type signature
              or use -XNoMonomorphismRestriction
Note: there are several potential instances:
  instance Eq a => Eq (GHC.Real.Ratio a) -- Defined in `GHC.Real'
  instance Eq () -- Defined in `GHC.Classes'
  instance (Eq a, Eq b) => Eq (a, b) -- Defined in `GHC.Classes'
  ...plus 22 others
In the first argument of `(.)', namely `nub'
In the expression: nub . mergeTuples
In an equation for `merge':
    merge
      = nub . mergeTuples
      where
          mergeTuples = foldr (\ (a, b) r -> a : b : r) []

失敗,模塊已加載:無。

讓我們將其分離出來,首先,合並元組

mergeTuples :: [(a, a)] -> [a]
mergeTuples = concatMap (\(a, b) -> [a, b]) -- Thanks Chuck
-- mergeTuples = foldr (\(a, b) r -> a : b : r) []

然后我們可以使用nub使其獨特

merge :: Eq a => [(a, a)] -> [a]
merge = nub . mergeTuples

如果你想所有人在一起

merge = nub . mergeTuples
  where mergeTuples = concatMap (\(a, b) -> [a, b])

或者,如果您想將其粉碎在一起(請勿這樣做)

merge [] = []
merge ((a, b) : r) = a : b : filter (\x -> x /= a && x /= b) (merge r)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM