List 递归函数中的非穷举模式错误
我试图使用递归和高阶函数对列表中的第一个元素进行处理,然后对列表中的每个其他元素进行处理,例如,在第1、第3、第5个元素中添加3。。等等 我遇到的问题是,它给了我非穷举模式错误。任何帮助都将不胜感激。以下是我到目前为止的情况: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
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,但它的格式会更好,作为一篇新文章对其他人更有用。