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

Remove the First Value in a List that Meets a Criterion

我正在尝试解决这个问题。这个函数有两个参数。第一个是 returns 布尔值的函数,第二个是数字列表。该函数应该删除第二个参数中的第一个值,当第一个参数 运行 时 returns 为真。 还有第二个函数,它做同样的事情,除了它删除满足它的最后一个值,而不是第一个。 我相当确定我的逻辑是错误的,因为我用另一种语言测试了它并且它起作用了,我唯一的问题是 t运行 将它变成 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 = []

说“无论我的论点是什么,只要 return []”,其余代码将被忽略。

你的意思可能是

removeFirst p [] = []

说“当列表已经为空时,return 空列表。”

removeFirst p xs = []

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

removeFirst _ [] = []