在实际实践中如何使用groupBy和zip?
|
import Data.List.Split
import Data.List(nub, groupBy)
z = splitOn \"+\" \"x^2+2*x^3+x^2\"
y = map (splitOn \"*\") z
x = map head y
toInt :: [String] -> [Int]
toInt = map read
u1 = filter ((< 2) . length) y
u2 = filter ((> 1) . length) y
v = map (\"1\" :) u1
q = u2 ++ v
q2 = zip toInt(map head q) (map last q)
q6 = groupBy nub(map tail q) q
q3 = map tail q
q5 = nub(q3)
q1 = map head q
1.对于
zip toInt(map head q) (map last q)
我想将头转换为整数后将头重新添加到尾
结果应该是[[1,\"x^3\"],[2,\"x^2\"],[1,\"x^2\"]]
我可以
*Main Data.List> zip [2,1,1] [\"x^3\",\"x^2\",\"x^2\"]
[(2,\"x^3\"),(1,\"x^2\"),(1,\"x^2\")]
但是上面没有,我注意到的是,这是()
,而不是[]
2.如何在列表上写groupBy
,我为passed6ѭ传递了不同的元素
分组后,用于添加他们的头
groupBy (nub(map tail q)) q
:1:10:
无法匹配预期的类型a0 -> a0 -> Bool\'
with actual type
[a1] \'
在调用nub\'
In the first argument of
groupBy\的返回类型中,即`(nub(map tail q))\'
在表达式中:groupBy(nub(map tail q))q
q就像一个哈希表,似乎它不能按第二个元素分组
没有找到相关结果
已邀请:
1 个回复
坝镰补翔奋
并没有像您想象的那样被解析。 与具有C样式语法的语言不同,haskell将上述内容解析为
(请注意空格)。 也就是说,它并未按照您希望的方式对applying14ѭ的结果应用
。相反,它正在尝试执行
,这将给您键入错误,因为您正在压缩函数和列表。 您想要的是
或更简洁
至于第二个问题,语法也有类似的问题。另外,
的第一个参数需要是一个确定相等性的函数,以创建组。