删除满足条件的列表中的第一个值
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 _ [] = []
我正在尝试解决这个问题。这个函数有两个参数。第一个是 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 _ [] = []