string – 计算将一个字符替换为另一个字符的所有可能性

> magicFunction 'l' '_' "hello world"
["he_lo world", "hel_o world", "hello wor_d"]

标准前奏中是否有这样一个神奇的功能,还是可以与其他功能轻松组合?

不,这不是家庭作业,但是,请不要花费太多时间来处理自己复杂的解决方案,我宁愿自己做也不要浪费你的时间;)只是问它是否符合标准.

编辑:这是我的第一次尝试:

import Data.List (findIndices)

replace i y xs = take i xs ++ y : drop (i+1) xs

magicFunction x y xs = map (\i -> replace i y xs) (findIndices (== x) xs)

可以改进吗?当然,替换必须符合标准吗?我发现replace :: Eq a => a – > a – > [a] – > [a]在Network.CGI.Protocol中,但它的签名错误.

最佳答案
不,标准库中没有像magicFunction这样的东西.但是你自己写的很容易,所以除非它是一个经常使用的功能,否则把它放在一个库中是没有意义的.除了你的版本和Daniel Wagner的尾部和尾部提示,这里有一个简单的实现:

magicFunction find replace = init . helper
  where
    helper (c:cs) = if c == find then ((replace:cs):) else id $map (c:) (helper cs)
    helper [] = [[]]

转载注明原文:string – 计算将一个字符替换为另一个字符的所有可能性 - 代码日志