【发布时间】:2011-03-31 13:09:02
【问题描述】:
我在做这个练习时遇到了问题,请帮忙!
定义一个函数remove,它接受一个整数和 一个整数列表作为输入并返回删除得到的列表 列表中第一次出现的整数;
delete :: Int -> [Int] -> [Int]
【问题讨论】:
-
到目前为止你尝试过什么?如果我们知道您被困在哪里,我们会更容易提供帮助。
我在做这个练习时遇到了问题,请帮忙!
定义一个函数remove,它接受一个整数和 一个整数列表作为输入并返回删除得到的列表 列表中第一次出现的整数;
delete :: Int -> [Int] -> [Int]
【问题讨论】:
我正在学习 Haskell,所以我的回答并不权威。我没有发布我为回答您的问题而编写的代码,而是尝试按照我看待问题的方式编写代码。
我查看了各种案例(我发现这对 Haskell 有帮助):
从空列表中删除任何内容...这很容易
从非空列表 (ys) 中删除某些内容 (x):
2.1。 x 是否等于ys 的第一个元素?那我就完了……
2.2。否则我只需要从ys的第一个元素之后开始的列表中删除x
【讨论】:
将删除视为构建一个没有相关元素的新列表,而不是删除元素本身。 (听起来像家庭作业,所以我不会比这更具体:))
【讨论】:
很抱歉给出答案,但这里是,直接来自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,那么它应该是不言自明的。随意询问其中任何一项对您来说是否陌生。
【讨论】:
首先:声明函数(查看函数声明的工作方式)- 取决于语言,它看起来类似于:
array
delete( int input1, array input2 )
{
}
然后处理函数体
声明你需要的变量, 执行数组操作 返回结果数组。
【讨论】: