【发布时间】:2016-10-19 02:10:24
【问题描述】:
假设下面的代码(不起作用)接受一个谓词,如(==2) 和一个整数列表,并且只删除列表中满足谓词的最后一个元素:
cutLast :: (a -> Bool) -> [Int] -> [Int]
cutLast a [] = []
cutLast pred (as:a)
| (pred) a == False = (cutLast pred as):a
| otherwise = as
此代码不起作用,因此显然不能像这样反向迭代列表。我怎样才能实现这个想法?我不能 100% 确定代码是否正确 - 但希望它能传达这个想法。
【问题讨论】:
-
如果没有满足条件的元素,你期望什么行为?原样返回列表?
-
@Alec:正确。
-
如果不清楚,
[Int]可能是您的问题的不良数据结构(尽管我们需要知道您打算支持的其他操作以提出更好的建议) -
在编写该伪代码时,我将整数视为可能的测试参数 - 在我的最终代码中,我使用
cutLast :: (a -> Bool) -> [a] -> [a]解决了这个问题。
标签: haskell