我們被要求在Haskell中自己編寫一個函數,當給定一個列表並且某個元素返回一個新列表時,它包含該列表中的那個元素。返回列表中某個元素的所有位置,但不包含遞歸,但帶有列表生成器
我已經嘗試了很長一段時間,但我目前仍然使用遞歸,任務說我們不應該使用遞歸。
allPositionsOf :: (Eq a) => a -> [a] -> [Int]
allPositionsOf e es = [i | i <- [0 .. (length es - 1)], IsAtPos e es i]
where
isAtPos :: (Eq a) => a -> [a] -> Int -> Bool
isAtPos e (x:xs) 0
|x == e = True
|otherwise = False
isAtPos e (x:xs) i = findAtPosition xs e (i - 1)
我知道有!和其他類似的功能,但它可能只是使用列表生成器,並保持簡單?
你是什麼意思列表生成器? –