List 递归函数中的非穷举模式错误

List 递归函数中的非穷举模式错误,list,haskell,recursion,List,Haskell,Recursion,我试图使用递归和高阶函数对列表中的第一个元素进行处理,然后对列表中的每个其他元素进行处理,例如,在第1、第3、第5个元素中添加3。。等等 我遇到的问题是,它给了我非穷举模式错误。任何帮助都将不胜感激。以下是我到目前为止的情况: applyToEveryOther :: (a -> b) -> [a] -> [b] applyToEveryOther _ [] = [] applyToEveryOther f (x:y:xs) = f x : applyToEveryOther

我试图使用递归和高阶函数对列表中的第一个元素进行处理,然后对列表中的每个其他元素进行处理,例如,在第1、第3、第5个元素中添加3。。等等

我遇到的问题是,它给了我非穷举模式错误。任何帮助都将不胜感激。以下是我到目前为止的情况:

applyToEveryOther :: (a -> b) -> [a] -> [b]
applyToEveryOther _ [] = []
applyToEveryOther f (x:y:xs) = f x : applyToEveryOther f xs
以下是我尝试过但没有帮助的一些附加行:

applyToEveryOther _ [x] = f x
applyToEveryOther f [x] = f x

单元素大小写还应返回类型为[b]的列表:


单元素大小写还应返回类型为[b]的列表:


另一种不使用显式递归,只使用高阶函数的解决方案:

import Data.List (cycle)

applyToEveryOther f = zipWith ($) (cycle [f, id])
循环创建一个交替函数f、id、f、id等的无限列表

zipWith$将列表中的函数应用于输入列表的相应元素

[(+1), id, (+1), id, (+1), id, (+1), id, ...]
[   1,  2,    3,  4,    5,  6,    7,  8     ]
=============================================
[   2,  2,    4,  4,    6,  6,    8,  8     ]
帽子提示:在1HaskellADay twitter提要上,将函数列表分段应用于参数列表的问题,以及使用zipWith$的解决方案

我自己的低级解决方案是使用Control.Applicative中的ZipList类型构造函数;在这里应用,它看起来像

import Control.Applicative

applyToEveryOther f xs = let fs = cycle [f,id]
                          in getZipList (ZipList fs <*> ZipList xs)

另一种不使用显式递归,只使用高阶函数的解决方案:

import Data.List (cycle)

applyToEveryOther f = zipWith ($) (cycle [f, id])
循环创建一个交替函数f、id、f、id等的无限列表

zipWith$将列表中的函数应用于输入列表的相应元素

[(+1), id, (+1), id, (+1), id, (+1), id, ...]
[   1,  2,    3,  4,    5,  6,    7,  8     ]
=============================================
[   2,  2,    4,  4,    6,  6,    8,  8     ]
帽子提示:在1HaskellADay twitter提要上,将函数列表分段应用于参数列表的问题,以及使用zipWith$的解决方案

我自己的低级解决方案是使用Control.Applicative中的ZipList类型构造函数;在这里应用,它看起来像

import Control.Applicative

applyToEveryOther f xs = let fs = cycle [f,id]
                          in getZipList (ZipList fs <*> ZipList xs)

如果我对此有其他问题,则可能重复的。。如果我真的想保留整个列表,而不仅仅是保留那些被改变的列表,我将如何着手去做呢。我是新来的,不确定我是否写了一篇新文章not@loutej绝对是一个新的职位!我想答案是fx:y:apply其他的fx,但它的格式会更好,作为一篇新文章对其他人更有用。。如果我真的想保留整个列表,而不仅仅是保留那些被改变的列表,我将如何着手去做呢。我是新来的,不确定我是否写了一篇新文章not@loutej绝对是一个新的职位!我认为答案是fx:y:applytotherfxs,但它的格式会更好,作为一篇新文章对其他人更有用。