Haskell 不能';t将预期类型[a]与实际类型'Integer->;[整数]';
我有下面的代码,找到一个整数的除数,然后找到除数的所有子集,然后对每个子集中的所有除数求和,然后测试该整数是否在求和列表中表示。在findWeird中,这是在整数列表上执行的Haskell 不能';t将预期类型[a]与实际类型'Integer->;[整数]';,haskell,Haskell,我有下面的代码,找到一个整数的除数,然后找到除数的所有子集,然后对每个子集中的所有除数求和,然后测试该整数是否在求和列表中表示。在findWeird中,这是在整数列表上执行的 allSubsets :: (Integral a ) => [a] -> [[a]] allSubsets [] = [[]] allSubsets ( n : nr ) = allSubsets nr ++ map (n:) (allSubsets nr) sumAllSubsets :: (Integr
allSubsets :: (Integral a ) => [a] -> [[a]]
allSubsets [] = [[]]
allSubsets ( n : nr ) = allSubsets nr ++ map (n:) (allSubsets nr)
sumAllSubsets :: (Integral a ) => [a] -> [a]
sumAllSubsets s = map sum (allSubsets s)
allDivisors :: (Integral a) => a -> [a]
allDivisors 0 = []
allDivisors n | n > 0 = [d | d <- [1..n], n `mod` d == 0]
| n < 0 = -1 : allDivisors (-n)
findWeird :: (Integral a) => [a] -> [a]
findWeird [] = []
findWeird (n:nn) = ( if n `elem` (AS.sumAllSubsets (DFL.allDivisors))
then []
else [n]) ++ findWeird nn
但据我所知,所有除数产生一个[Integral],而sumAllSubsets得到一个[Integral],所以我想知道是否有人能帮忙。谢谢。我认为问题在于你实际上没有将
所有除数
应用于任何东西:
AS.sumAllSubsets (DFL.allDivisors)
只是将sumAllSubsets
应用于函数alldivisiors
,而不是其[整数]
返回值。也许您的意思是AS.sumAllSubsets(DFL.alldivisiors n)
,也就是说,将alldivisiors
应用于n
(顺便说一句,
findWeird
只是在做一个简单的操作,可以写成
findWeird nn = filter (\n -> n `notElem` (sumAllSubsets $ allDivisors n)) nn
在这里,我还冒昧地通过()减少了一些嵌套。我认为问题在于您实际上没有将
所有除数
应用于任何东西:
AS.sumAllSubsets (DFL.allDivisors)
只是将sumAllSubsets
应用于函数alldivisiors
,而不是其[整数]
返回值。也许您的意思是AS.sumAllSubsets(DFL.alldivisiors n)
,也就是说,将alldivisiors
应用于n
(顺便说一句,
findWeird
只是在做一个简单的操作,可以写成
findWeird nn = filter (\n -> n `notElem` (sumAllSubsets $ allDivisors n)) nn
在这里,我还冒昧地通过()减少了一些嵌套。我认为问题在于您实际上没有将
所有除数
应用于任何东西:
AS.sumAllSubsets (DFL.allDivisors)
只是将sumAllSubsets
应用于函数alldivisiors
,而不是其[整数]
返回值。也许您的意思是AS.sumAllSubsets(DFL.alldivisiors n)
,也就是说,将alldivisiors
应用于n
(顺便说一句,
findWeird
只是在做一个简单的操作,可以写成
findWeird nn = filter (\n -> n `notElem` (sumAllSubsets $ allDivisors n)) nn
在这里,我还冒昧地通过()减少了一些嵌套。我认为问题在于您实际上没有将
所有除数
应用于任何东西:
AS.sumAllSubsets (DFL.allDivisors)
只是将sumAllSubsets
应用于函数alldivisiors
,而不是其[整数]
返回值。也许您的意思是AS.sumAllSubsets(DFL.alldivisiors n)
,也就是说,将alldivisiors
应用于n
(顺便说一句,
findWeird
只是在做一个简单的操作,可以写成
findWeird nn = filter (\n -> n `notElem` (sumAllSubsets $ allDivisors n)) nn
我还冒昧地通过减少了一些嵌套。)@user3711004,顺便说一句,如果答案解决了您的问题,您应该单击它旁边的复选标记,以:@用户3711004,顺便说一句,如果答案解决了您的问题,您应该单击它旁边的复选标记,以:@用户3711004,顺便说一句,如果答案解决了您的问题,您应该单击它旁边的复选标记,以:@用户3711004,顺便说一句,如果答案解决了您的问题,您应该单击它旁边的复选标记,以: