【发布时间】:2015-07-19 14:43:09
【问题描述】:
我有这个编解码器,但它没有显示重复的元素,为什么?
cosinesim :: Ord a => [(a,Float)] -> [(a,Float)] -> [(a,Float,Float)]
cosinesim a b = go a b
where
go [] b = map (\l -> (fst l, 0, snd l)) b
go a [] = map (\l -> (fst l, snd l, 0)) a
go a@((x,n):t) b@((y,m):r) = case compare x y of
LT -> (x,n,0) : go t b
EQ -> (x,n,m) : go t r
GT -> (y,0,m) : go a r
输入:两个列表排序。
List1=[(["variety"], 4.50),(["vegetable"], 3.50),(["velvet"], 2.50)]
List2=[(["variety"], 4.50),(["ve"], 3.50),(["velvet"], 2.50)]
输出:
[(["variety"], 4.50, 4.50 ), (["vegetable"], 3.50, 0), (["velvet"], 2.50 2.50) ,(["ve"], 0, 3.50)]
我的问题是因为只显示在两个列表中重复的元素,因为我想要的是所有元素都出现。
【问题讨论】:
-
它应该做什么?
-
我有两个列表。并将第一个列表与第二个进行比较。如果该项目存在于第二个列表中,则使我成为(项目 5.5)如果它仅存在于第一个列表中(元素 5.0)如果仅存在于第二个列表中(项目 0.5)。但只有它向我展示了重复的元素。
-
什么是
Item 5.5、Element 5.0和Item 0.5? -
is (string, Float, Float) 其中 String 取决于存在的列表。浮点数是在其他操作中计算的值。
-
你能把它添加到你的问题中吗?格式在评论中被弄乱了,使用完整的markdown更容易阅读。
标签: list haskell merge compare