Haskell 函数取出最后一次出现的输入字符

2023-12-21

我在编写这个函数时遇到问题,该函数需要一个字符和一个字符列表,然后消除列表中该输入字符的最后一次出现。我能够使用下面的函数取出输入字符的第一次出现:

fun :: Char -> String -> String
fun c (s:ss)
 | s == c   = ss
 | otherwise = s : fun c ss
fun _ [] = []

我需要帮助的是我应该如何修改这个函数以取出输入字符的最后一次出现,而不是第一次出现。结果应该是这样的fun 'c' "abcdccytrc"返回"abcdccytr".


正如 Numeri 所建议的,通过删除反转列表中的第一个出现来删除最后一个出现是一种方法:

removeFirst :: Char -> String -> String
removeFirst _ [] = []
removeFirst c1 (c2:cs) = if c1 == c2 then cs else c2:removeFirst c1 cs

removeLast :: Char -> String -> String
removeLast c1 = reverse . removeFirst c1 . reverse

正如 Will Ness 所建议的,返回删除最后一个出现的字符串,以及指示是否应删除当前出现的布尔值是另一种方法:

removeLast :: Char -> String -> String
removeLast c1 = snd . remLast
  where
    remLast :: String -> (Bool, String)
    remLast [] = (False, [])
    remLast (c2:cs) =
      case remLast cs of
        (True, cs') -> (True, c2:cs')
        (False, cs') -> if c1 == c2 then (True, cs') else (False, c2:cs')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell 函数取出最后一次出现的输入字符 的相关文章

随机推荐