Haskell 不能';与包函数中的预期类型不匹配
我正在处理Haskell中的99个问题,遇到了一个无法解决的类型问题。第一次尝试时,我使用了一个包装函数来解决这个问题 目标 将列表元素的连续副本打包到子列表中。如果列表包含重复的元素,则应将它们放在单独的子列表中 例子: 我的代码: 因此,当我运行此程序时,第7行出现问题,并获得以下调试器输出:Haskell 不能';与包函数中的预期类型不匹配,haskell,Haskell,我正在处理Haskell中的99个问题,遇到了一个无法解决的类型问题。第一次尝试时,我使用了一个包装函数来解决这个问题 目标 将列表元素的连续副本打包到子列表中。如果列表包含重复的元素,则应将它们放在单独的子列表中 例子: 我的代码: 因此,当我运行此程序时,第7行出现问题,并获得以下调试器输出: 09.hs:7:15: Couldn't match expected type `[a0] -> [[a]]' with actual type `[
09.hs:7:15:
Couldn't match expected type `[a0] -> [[a]]'
with actual type `[[a]]'
The function `(filter (== head ys) ys) : xs'
is applied to one argument,
but its type `[[a]]' has none
In the expression: ((filter (== head ys) ys) : xs) (filter (/= head ys) ys)
In an equation for pack':
pack' xs ys = ((filter (== head ys) ys) : xs) (filter (/= head ys) ys)
Failed, modules loaded: none.
我只是不知道额外的[a0]->[a]]是从哪里来的
Prelude> let b = [5,3,4,5,3,2,3,4,5,6]
Prelude> (filter (== head b) b):[]
[[5,5,5]]
Prelude> (filter (== head b) b):[[4,4]]
[[5,5,5],[4,4]]
我脑子里有点不对劲。有人能解释一下我遗漏了什么吗?这第七行有点奇怪:
((filter (== head ys) ys):xs) (filter (/= head ys) ys)
它说的是:
((filter (== head ys) ys):xs)
(filter (/= head ys) ys)
let func = ((filter (== head ys) ys):xs)
arg = (filter (/= head ys) ys)
in func arg
你没有在这两个表达之间加上什么吗?请记住,在本例中,arg
是[a]
,而func
是[a]
。我想你是想说
func : [arg]
但我不确定,因为我不知道你想要实现什么。这第七行有点奇怪:
((filter (== head ys) ys):xs) (filter (/= head ys) ys)
它说的是:
((filter (== head ys) ys):xs)
(filter (/= head ys) ys)
let func = ((filter (== head ys) ys):xs)
arg = (filter (/= head ys) ys)
in func arg
你没有在这两个表达之间加上什么吗?请记住,在本例中,arg
是[a]
,而func
是[a]
。我想你是想说
func : [arg]
但是我不确定,因为我不知道您想要完成什么。表达式
pack'xs ys=((filter(=head ys)ys):xs)(filter(/=head ys)ys)
包含错误。子表达式((filter(=head ys)ys):xs)
用作函数,其参数为(filter(/=head ys)ys)
。但是,((filter(=head ys)ys):xs)
具有类型[[a]]
,因为filter(=head ys)ys
返回类型为[a]
的值,并将其附加到xs
的前面,该类型为[[a]]
pack'
的预期返回值是多少?你能提供一个例子来演示它的行为吗?表达式pack'xs ys=((filter(=head ys)ys):xs)(filter(/=head ys)ys)
包含错误。子表达式((filter(=head ys)ys):xs)
用作函数,其参数为(filter(/=head ys)ys)
。但是,((filter(=head ys)ys):xs)
具有类型[[a]]
,因为filter(=head ys)ys
返回类型为[a]
的值,并将其附加到xs
的前面,该类型为[[a]]
pack'
的预期返回值是多少?你能提供一个例子来演示它的行为吗?是的,我忘了递归调用pack。这是一个让我感到沮丧的案例……唉。也许我应该删除这个问题是的,我忘了递归调用pack。这是一个让我感到沮丧的案例……唉。也许我应该从数据中删除与组相同的问题pack
。我只想在不重命名函数的情况下执行此操作。组
仅对连续的重复项进行组,仅供参考。感谢您更正我的错误更正@kqr@kqr这不是pack在这里做的吗?pack
与Data中的group
相同。List
正确,我只是在解决一些练习。我只想在不重命名函数的情况下执行此操作。组
仅对连续的重复项进行组,仅供参考。感谢您更正我的错误更正@kqr@kqr那不是帕克在这里干的事吗?