【发布时间】:2011-04-19 12:22:13
【问题描述】:
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,我为groupBy 传递了不同的元素
分组后,就是为了加他们的头
groupBy (nub(map tail q)) q
:1:10:
无法匹配预期类型 a0 -> a0 -> Bool'
with actual type[a1]'
在nub'
In the first argument ofgroupBy'的调用的返回类型中,即`(nub(map tail q))'
表达式中:groupBy (nub (map tail q)) q
q就像一个哈希表,好像不能按第二个元素分组
【问题讨论】:
-
[[1,"x^3"],[2,"x^2"],[1,"x^2"]]在 Haskell 中是不可能的:你不能在一个列表中混合不同的类型,但是这里的内部列表同时包含 Ints 和 Strings。通常的解决方案是使用元组。另一种解决方案是异构列表,但我想这在这里太过分了。 -
可以,结果是[(1, "a"),(2, "b")]
-
在 Haskell 中,
()表示元组,[]表示列表,两者本质上是不同的。如果您理解这一点,请相应地更改您的问题。
标签: haskell zip combinators