为什么会出现解析错误?我插入一个列表,并希望得到元组.(顶行是正确的).
freq :: Eq a => [a] -> [(Int,a)]
freq x:xs = [(x,y)| (x,y) x <- count , y <- rmdups]
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个remove
函数,以便用户可以输入remove 'd' ["abc", "dc", "ad"]
并获取输出["abc", "c", "a"]
.
我的代码是:
remove :: Eq a => a -> [[a]] -> [[a]]
remove a (x:xs) = filter (not.a) (x:xs)
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误消息:
Occurs check: cannot construct the infinite type: a = [a] -> Bool
When generalising the type(s) for `remove'
Run Code Online (Sandbox Code Playgroud)
错误消息的含义是什么,以及如何更改第二行以使其有效?
上面,我的形状创建者的代码,这是一个部分,但独立.
我收到错误
g2d.drawLine(p1.getX(), p1.getY(), p2.getX(), p2.getY());
Run Code Online (Sandbox Code Playgroud)
这基本上说它不能在基本类型double上调用getX(),不能在基本类型double上调用getY().
我可以更改除该方法之外的任何代码.有谁知道我怎么能摆脱那个错误,因为我不知道这意味着什么.
count :: Eq a => a -> [a] -> Int
count _[] = 0
count z (x:xs) | z == x = 1 + (count z xs)
| otherwise = count z xs
rmdups :: Eq a => [a] -> [a]
rmdups [] = []
rmdups (x:xs) | count x xs > 0 = rmdups xs
| otherwise = x: rmdups xs
Run Code Online (Sandbox Code Playgroud)
上面的代码编译,但是当我输入'ababca'
rmdups的输出时'bca'
,我希望它是'abc'
.为什么去那里?我一直在改变代码,并且不知道为什么会这样做.
我是Haskell的新手,我正在尝试使用它的第一个元素对元组列表进行排序sort
.所以,如果我有,["a", "b", "a", "c", "c"]
我会得到类似的东西[(1,"b"), (2,"a"), (2,"c")]
(在相同数字的情况下按字母顺序排列).
我该怎么做呢?我现在完全迷失了......我仍然试图进入'哈斯克尔的思维方式'.