list - 元组列表上的Haskell函数如何将所有组件与以下每个组件进行比较
问题描述
我正在尝试创建一个函数,它将元组列表中的元素与其他所有列表进行比较以获取特殊数据类型:
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)
。
推荐阅读
- python - 用值代替熊猫数据框中的变量
- swift - 如何将数据存储在不同级别但引用同一个对象
- javascript - 试图让 firebase.auth().currentUser 成为一个承诺
- sympy - Python 包 sympy.physics.units 的合理用例是什么?
- java - 正则表达式匹配三个非连续数字,其中数字需要为 0 或 1
- reactjs - 材质 UI ListItemSecondaryAction 在 ListItem 中垂直对齐
- python - 如何在给定包含字典的列表列表的情况下找到交集
- olap - 从 CSV 文件创建多个 Pinot 段(Apache Pinot 数据摄取)
- laravel - 我正在尝试从不存在的数据库中删除我的记录。并更新我存在的记录。使用 laravel
- vuejs2 - VueJs 组件的 Prop 相关计算属性对对象数组 Prop 更改没有反应