2011-03-31 97 views
0

我在练习时遇到问题,请帮忙!定义删除功能

定义一个函数remove将一个整数和 一个整数列表作为输入,并返回通过删除 获得的列表第一次出现在列表中的整数;

delete :: Int -> [Int] -> [Int] 
+4

你到目前为止尝试过什么?如果我们知道你被困在哪里,我们将更容易协助。 – 2011-03-31 13:11:34

+0

哪种语言? – jonsca 2011-03-31 13:12:48

+2

听起来像一个家庭作业。 – 2011-03-31 13:34:34

回答

5

想想删除建立一个新的列表没有问题的元素,而不是删除元素本身。 (听起来像功课,所以我会在没有比这更:)具体)

+0

嗯,坚韧的位是它是列表中的第一个元素,它可能会出现很多次。 – steven 2011-03-31 18:33:38

+0

没问题。请按照下面的MarcoS描述的方式考虑这些情况。如果列表的头部是要删除的元素,只需使用列表尾部的删除即可。 – 2011-03-31 18:35:33

6

我学习Haskell,所以我的答案是不具有权威性。我没有发布我写的代码来回答你的问题,而是试着写我看问题的方式。

我走近它着眼于各种情况(我发现这有助于哈斯克尔):

  1. 删除无论从空列表...这很容易

  2. 删除的东西( x)从非空列表(ys):

    2.1。是x等于ys的第一个元素?然后我做...

    2.2。否则我只需要ys

+0

1.删除N [] =错误 “空列表” 2.删除N Y | n == y = [] |否则= y 3。删除n(y:ys) | n == y = ys | – steven 2011-03-31 18:49:47

+0

1. delete _ [] = [] 2. delete x(y:ys)| x == y = ys |否则= y:(删除x ys) – MarcoS 2011-03-31 19:26:29

-2

第一的第一个元素之后,从启动列表中删除x:声明函数(查找函数的声明是如何工作的) - 根据语言,它看起来与此类似:

array 
delete(int input1, array input2) 
{ 
} 

然后在功能需要

声明THA变量, 执行数组操作 返回结果数组的身体工作。

+1

问题在Haskell上:函数是特殊的,与_usual_语言有很大的不同! – MarcoS 2011-03-31 13:53:23

+0

哇 - 贴BEFORE OP宣布语言... geez。 – Randy 2011-03-31 17:36:36

0

对不起放弃了答案,但在这里它是直接从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,那么它应该是不言自明的。请随时询问这些中的任何一条对您是否是外来的。