簡體   English   中英

元組列表上的 Haskell Function 如何將所有組件與以下每個組件進行比較

[英]Haskell Function on tuple list how to compare all component with each following component

我正在嘗試創建一個函數,它將元組列表中的元素與其他所有列表進行比較以獲取特殊數據類型:

data Term = Var VarName | Comb CombName [Term]
  deriving (Eq, Show)
data Subst = Subst [(VarName, Term)]
  deriving Show

所以我正在嘗試執行以下操作:

[(VarName "Y",Comb "2" []),(VarName "Y",Var (VarName "X"))]   -> Subst [(VarName "Y",Comb "2" [])]

如果我們有一個元組 (a,b),那么我們想檢查 [(VarName,Term)] 中的每個元組是否有任何元組 (c,d) 其中 a=b 如果是,那么我們想檢查 b 是否具有類型 Comb x [] 或 d 的類型為 Comb x []。 在檢查我們想要刪除元組之后,第二個組件的類型不是 Comb x []。 (不可能有將 Comb x [] 作為類型作為第二個組件的元組)

我的嘗試:

test :: [(VarName,Term)] -> [(VarName,Term)]
test []         = []
test ((x,y):[]) = ((x,y):[]) 
test ((x,y):xs) = map (check (x,y) xs)

check (VarName,Term) -> [(VarName,Term)] -> (VarName,Term)
check (x,y) [] = [(x,y)]
check (x,y) ((a,b):xs) = if x==a && y = CombName i [] then (x,y) else ((a,b))

有人可以幫幫我嗎,我是 Haskell 的新手。 謝謝:)

我認為您正在尋找nubBy:: (a -> a -> Bool) -> [a] -> [a] 試試nubBy (on (==) fst)

暫無
暫無

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

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