Haskell列表错误的部分和

布料

我需要在Haskell中编写一个函数,该函数求和一个列表的元素,直到某些特定的元素存储在另一个列表中。

例如partial_add [1,2,3,4,5,6] [2,5] 0应该返回[3,12,6]

我到现在为止:

partial_add [] _ count = []
partial_add (a:x) list count | elem a list =  count:partial_add x list 0
                             | otherwise =  partial_add x list count+a

(很可能无法正常工作)

但是,当我尝试运行该函数(正确编译)时,出现此错误:

No instance for (Num [t0]) arising from a use of `it' 
In a stmt of an interactive GHCi command: print it

知道发生了什么吗?

坏的

给定您的示例,我将编写如下所示的函数:

partialAdd :: [Int] -> [Int] -> [Int]
partialAdd ls seps = foldr f [] ls
  where 
    f a [] = [a]
    f a (x:xs)
      | a `elem` seps = a:x:xs
      | otherwise = (x+a):xs

*Main> partialAdd [1,2,3,4,5,6] [2,5]
[3,12,6]

顺便提一句。我认为您问题中的解决方案似乎无法按照您在示例中指定的方式工作(或者我误解了):

partial_add :: [Int] -> [Int] -> Int -> [Int]
partial_add [] _ count = []
partial_add (a:x) list count | elem a list =  count:partial_add x list 0
                             | otherwise =  partial_add x list (count+a)

*Main> partial_add [1,2,3,4,5,6] [2,5] 0
[1,7]

但这很容易解决,适合您的示例:

partial_add :: [Int] -> [Int] -> Int -> [Int]
partial_add [] _ count = [count]
partial_add (a:x) list count | elem a list =  (count+a):partial_add x list 0
                             | otherwise =  partial_add x list (count+a)

*Main> partial_add [1,2,3,4,5,6] [2,5] 0
[3,12,6]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章