创建可能的字符串变体数组

Creating an array of possible string variations

我想弄清楚如何通过用另一个数组中的不同字符一次替换字符串中的一个字符来创建字符串的变体。

例如:

variations = "abc"

getVariations "xyz" variations

应该return:

["xbc", "ybc", "zbc", "axc", "ayc", "azc", "abx", "aby", "abz"]

我不太确定该怎么做。我尝试遍历字符串,然后使用列表理解来添加可能的字符,但我最终丢失了字符。

[c ++ xs | c <- splitOn "" variations]

其中 xs 是字符串的尾部。

有人能给我指出正确的方向吗?

你可以递归地定义 getVariations replacements input

  • 如果input为空,结果为...
  • 如果 input(a:as),合并以下结果:
    1. replacements
    2. 中的字符替换 a
    3. 保持 a 不变并在 as
    4. 上执行 getVariations

这意味着 getVariations 的定义可能类似于:

getVariations replacements []  = ...
getVariations replacements (a:as) = ...#1... ++ ...#2...

这也可能有助于确定 getVariations 的类型:

getVariations :: String -> String -> ???