我是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)