gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:12:50 25 4
gpt4 key购买 nike

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

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 所建议的,返回其中最后一个出现的字符串被删除,以及一个 bool 值来指示当前出现的是否应该被删除,是另一个:

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')

关于string - Haskell 函数取出最后一次出现的输入字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com