首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找列表中元素的前面元素(Haskell)

查找列表中元素的前面元素(Haskell)
EN

Stack Overflow用户
提问于 2016-08-16 01:21:24
回答 4查看 1K关注 0票数 2

我想返回列表中元素的前一个元素。我打算得到参数的索引,并使用它来表示反对列表,这样参数是最后一个元素,然后反转它,然后取反列表的第二个元素。我得到了错误:输入elemIndexMaybe Int,而take函数需要Int。我想要修复它或者用简单的递归编写代码,是否有更短的使用递归的代码?

代码语言:javascript
运行
复制
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))
EN

Stack Overflow用户

发布于 2016-08-16 14:29:02

这方面的标准解决方案是使用压缩:

代码语言:javascript
运行
复制
import Data.List (find)

preceding :: (a -> Bool) -> [a] -> Maybe a
preceding f xs = fmap snd . find (f . fst) $ zip (drop 1 xs) xs
票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38965291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档