根据 filter 或 map 重新定义 drop 函数

Redefining the drop function in terms of filter or map

我有一个作业需要根据映射或过滤器函数重新定义放置函数。

下降 n (:xs) = 下降 (n-1) (xs) 下降 3 [1,2,3,4,5] = [4,5]

我有一个想法,但我不确定如何实现它。首先,用 [1..] 压缩列表的元素(比如 xs),然后得到与这些数字配对的列表元素(比如 (x,y))。然后你以某种方式尝试以 y 大于 3 的方式过滤这些对。

然后从过滤后的对中打印出 x 的元素。

但我很难将这个想法转化为代码。非常感谢我能得到的任何帮助或关于这个想法的建议。

你的想法完全正确。这是一个三步过程:(1) 使用某种枚举器进行压缩,(2) 基于索引进行过滤,以及 (3) 映射以去除枚举器。代表它的代码看起来像这样

drop :: Int -> [a] -> [a]
drop n xs = map snd . filter (\(i, _) -> i > n) . zip [1..] $ xs

其中 snd 是定义为

的 Prelude 函数
snd :: (a, b) -> b
snd (a, b) = b