haskell - 删除列表中满足条件的第一个值

标签 haskell recursion tail-recursion

我正在努力解决这个问题。该函数有两个参数。第一个是返回 bool 值的函数,第二个是数字列表。该函数应该删除第二个参数中的第一个值,该值在使用第一个参数运行时返回 true。 还有第二个函数,它执行相同的操作,只不过它删除满足它的最后一个值,而不是第一个。 我相当确定我已经掌握了逻辑,因为我用另一种语言测试了它并且它有效,我唯一的问题是将它翻译成 Haskell 语法。这是我所拥有的:

removeFirst :: (t -> Bool) -> [t] -> [t]
removeFirst p xs = []
removeFirst p xs
        |   p y = ys 
        |   otherwise = y:removeFirst p ys
        where
            y:ys = xs

removeLast :: (t -> Bool) -> [t] -> [t]
removeLast p xs = []
removeLast p xs = reverse ( removeFirst p ( reverse xs ) )

我跑了:

removeFirst even [1..10]

但是我得到的是 [],而不是预期的 [1,3,4,5,6,7,8,9,10]。 我做错了什么?

最佳答案

removeFirst p xs = []

这总是返回空列表并且它匹配所有参数。我想你的意思是这个。

removeFirst _ [] = []

关于haskell - 删除列表中满足条件的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28681339/

相关文章:

haskell - 比较中的 Monoid 实例在哪里定义?

haskell - 多态类型的显式类型签名。第二部分

algorithm - 如何在 Clojure 算法实现中处理多个变量?

scala - 如何优化 Scala 递归函数的双重调用

performance - 懒惰评估 : Why is it faster, 优缺点、机制(为什么它使用较少的 CPU;示例?)和简单的概念证明示例

list - 无法理解 Haskell 中的原始递归定义

haskell - OO 接口(interface)转换为 Haskell

haskell - 真实世界的 Haskell 代码无法编译?

python - Python 中的递归与 Beautiful Soup

c - Arduino 是否支持尾调用消除?