【问题标题】:Remove Integer From List从列表中删除整数
【发布时间】:2017-04-09 03:07:50
【问题描述】:

我正在尝试在 Haskell 中编写一个函数,该函数将获取一个整数列表,如果 m 是该列表的一个元素,它将打印没有 m 的列表,否则它只会打印该列表。我写了

rmvFirst :: Int -> [Int] -> [Int]
rmvFirst m []                           = error "Empty"                     
rmvFirst m [x]       |    x == m        = error "Empty Set"
rmvFirst m (x:xs)    |    x == m        = (xs)
rmvFirst m (x:xs)    |    otherwise     = rmvFirst m (xs)

如果我输入 3 [1..5],它会输出 [4..5]。但是,我想要 {1,2,4,5}。我使用的书只定义了minmax

【问题讨论】:

  • 用什么语言?
  • 为什么空输入或空结果是错误?这太令人惊讶了!另外,如果列表中有多个m 副本,您希望发生什么?
  • @dfeuer 在某些情况下出现空输入错误可能是有意义的。即,您想确保您的函数确实删除了一个元素——如果没有,则说明其他地方存在错误,因此我们现在可能要报告该问题。另一方面,空输出的错误真的很奇怪,我找不到该选择的任何理由。
  • @dfeuer @chi 我只是想获得在同一功能中混合不同类型案例的经验。我的选择是任意的。如果有多个m 我只想删除第一个实例。

标签: list function haskell


【解决方案1】:

错误是在最后一种情况下。您需要确保列表前面的x(不等于m)是您返回的列表的一部分。

【讨论】:

  • 我知道这就是问题所在。那是什么语法?
【解决方案2】:

正如@hugomg 所评论的,您的最后一个案例是错误的。

rmvFirst :: Int -> [Int] -> [Int]
rmvFirst m []                           = error "Empty"
rmvFirst m [x]       |    x == m        = error "Empty Set"
rmvFirst m (x:xs)    |    x == m        = (xs)
rmvFirst m (x:xs)    |    otherwise     = x : rmvFirst m (xs)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2021-06-19
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    相关资源
    最近更新 更多