小编Pro*_*Cat的帖子

如何通过不使用“列表推导”来获取列表中元素的索引?

我是Haskell编程的新手,我尝试通过/不使用列表推导来解决问题。

问题是在列表中查找元素的索引并返回索引列表(在列表中找到元素的位置)。

我已经通过使用列表推导解决了问题,但是现在我有一些不使用列表推导来解决问题的问题。

以我的递归方式:

我尝试将[0..(length list)]和的列表压缩为自己。然后,如果元素a等于列表中的元素->用压缩的Tupel的第一个元素创建一个新列表,然后list(my index)以递归方式搜索该函数,直到列表为[]。

这就是我的列表理解(有效):

positions :: Eq a => a -> [a] -> [Int]
positions a list = [x | (x,y) <- zip [0..(length list)] list, a == y]
Run Code Online (Sandbox Code Playgroud)

那是我的递归方式(不起作用):

positions' :: Eq a => a -> [a] -> [Int]
positions' _ [] = []
positions' a (x:xs) =
    let ((n,m):ns) = zip [0..(length (x:xs))] (x:xs)
    in if (a == m) then n:(positions' a xs)
       else (positions' a xs) 
Run Code Online (Sandbox Code Playgroud)

*对不起,我不知道如何突出显示单词

但是ghci说:

*Main> …
Run Code Online (Sandbox Code Playgroud)

indexing recursion haskell list-comprehension list

6
推荐指数
2
解决办法
152
查看次数

标签 统计

haskell ×1

indexing ×1

list ×1

list-comprehension ×1

recursion ×1