我在练习时遇到问题,请帮忙!定义删除功能
定义一个函数remove将一个整数和 一个整数列表作为输入,并返回通过删除 获得的列表第一次出现在列表中的整数;
delete :: Int -> [Int] -> [Int]
我在练习时遇到问题,请帮忙!定义删除功能
定义一个函数remove将一个整数和 一个整数列表作为输入,并返回通过删除 获得的列表第一次出现在列表中的整数;
delete :: Int -> [Int] -> [Int]
想想删除建立一个新的列表没有问题的元素,而不是删除元素本身。 (听起来像功课,所以我会在没有比这更:)具体)
嗯,坚韧的位是它是列表中的第一个元素,它可能会出现很多次。 – steven 2011-03-31 18:33:38
没问题。请按照下面的MarcoS描述的方式考虑这些情况。如果列表的头部是要删除的元素,只需使用列表尾部的删除即可。 – 2011-03-31 18:35:33
我学习Haskell,所以我的答案是不具有权威性。我没有发布我写的代码来回答你的问题,而是试着写我看问题的方式。
我走近它着眼于各种情况(我发现这有助于哈斯克尔):
删除无论从空列表...这很容易
删除的东西( x
)从非空列表(ys
):
2.1。是x
等于ys
的第一个元素?然后我做...
2.2。否则我只需要ys
对不起放弃了答案,但在这里它是直接从the source of Data.List
delete :: (Eq a) => a -> [a] -> [a]
delete = deleteBy (==)
deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
deleteBy _ _ [] = []
deleteBy eq x (y:ys) = if x `eq` y then ys else y : deleteBy eq x ys
一般情况下我在这里形容它,但如果你了解基本的递归,if语句,模式匹配,并:
运营商和部分应用/ currying,那么它应该是不言自明的。请随时询问这些中的任何一条对您是否是外来的。
你到目前为止尝试过什么?如果我们知道你被困在哪里,我们将更容易协助。 – 2011-03-31 13:11:34
哪种语言? – jonsca 2011-03-31 13:12:48
听起来像一个家庭作业。 – 2011-03-31 13:34:34