gpt4 book ai didi

Haskell程序查找列表中元素的位置

转载 作者:行者123 更新时间:2023-12-05 08:19:21 25 4
gpt4 key购买 nike

我需要编写一个函数来查找列表中某个特定元素的位置。我是这样写的:

findPos list elt | list == [] = -1
| head list == elt = 0
| otherwise = 1 + (findPos (tail list) elt)

但是如果元素在列表中重复出现怎么办?例如:list= [2,4,9,4,8​​] 我想要元素“4”的位置,然后有 2 个位置:第二个和第四个。一个简单的功能如何?

最佳答案

您应该为匹配的元素返回一个延迟评估的索引列表。

最简单的方法是首先使用 zip [0..] 对列表进行索引,然后在第二个元素上过滤压缩列表,最后删除第二个元素以保留索引.

-- first version
findPos list elt = map fst $ filter ((elt==).snd) $ zip [0..] list
-- second version, using list comprehensions
findPos list elt = [index | (index, e) <- zip [0..] list, e == elt]

关于Haskell程序查找列表中元素的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6322053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com