【问题标题】:Haskell - Remove the Nth odd number from a list [closed]Haskell - 从列表中删除第 N 个奇数 [关闭]
【发布时间】:2021-12-30 16:07:24
【问题描述】:

我一直想知道是否有办法从列表中删除第 N 个奇数

例如:

removeOdd 2 [2,4,3,6,5,8] == [2,4,3,6,8]

【问题讨论】:

    标签: haskell functional-programming


    【解决方案1】:

    递归应该可以帮助您:

    removeNthOdd :: Int -> [Int] -> [Int]
    -- basecase of an empty list
    removeNthOdd n [] = []
    removeNthOdd n (x : xs)
      -- odd number to remove is found, just return the rest of the list
      | odd x && n == 1 = xs
      -- odd number found, but not the one we want to remove
      -- so we decrement n to reach the case before
      | odd x && n > 0 = x : removeNthOdd (n - 1) xs
      -- x is even, so just continue
      | otherwise = x : removeNthOdd n xs
    
    *Main> removeNthOdd 2 [2,4,3,6,5,8] == [2,4,3,6,8]
    True
    

    考虑下次问一个具体问题以及你自己做了什么,例如粘贴一些代码,以达到您的目标。

    【讨论】:

      【解决方案2】:

      您有 2 个基本情况,列表为空,列表不为空。对于不为空的列表,您有 3 个子案例,n == 1(这意味着您需要删除下一个奇数)并且数字是奇数,n > 1 并且数字是奇数,并且数字不是奇数。

      removeNthOdd _ [] = []
      removeNthOdd n (x:xs)
        | x `mod` 2 == 1 && n == 1 = xs
        | x `mod` 2 == 1 = ...
        | otherwise = ...
      

      我已将这 2 个案例留给您实施。

      您还可以添加n 为零的情况。在这种情况下,您可以提前返回列表,因为没有一个奇数是最零的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        • 1970-01-01
        • 1970-01-01
        • 2023-01-28
        • 1970-01-01
        相关资源
        最近更新 更多