我想返回列表中元素的前一个元素.我打算获取参数索引并使用它来弃用列表,使得参数是最后一个元素,然后反转它并获取反向列表的第二个元素.我得到的错误:类型elemIndex是Maybe Int同时take功能要求Int.我想修复它或使用简单的递归编写代码是否有使用递归的较短代码?
precedingElement :: Eq a => a -> [a] -> Maybe a
precedingElement elt lst | lst == [] = error "List is empty"
| elt `notElem` lst = Nothing
| otherwise = Just x where x = snd (reverse (take (elt `elemIndex` lst) lst))
Run Code Online (Sandbox Code Playgroud) 我正在编写一个函数来为列表中的下两个元素应用一个函数.
例如:applyToTwo (+) [1,2,3,4]return [3,5,7].
applyToTwo (-) [7,1,1,1,1]回来[6,0,0,0].
我想概括类型,以便它可以应用于我想要的任何类型.我的尝试是:
applyToTwo :: (a -> a -> b) -> [a] -> [a]
applyToTwo f [] = []
applyToTwo f [x] = []
applyToTwo f (x:x1:rest) = f x x1 ++ applyToTwo f (x1:rest)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,有没有办法概括要应用的元素数量,以便它可以适用于3,4,5?