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

时间:2015-11-08 23:43:50

标签: string haskell list-comprehension

我试图找出如何创建字符串的变体,通过在字符串中一次替换一个字符与另一个数组中的不同字符。

例如:

  

variations =“abc”

     

getVariations“xyz”变种

应该返回:

  

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

我不太确定如何解决这个问题。我尝试遍历字符串,然后使用列表理解来添加可能的字符,但最终我失去了字符。

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

其中xs是字符串的尾部。

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

1 个答案:

答案 0 :(得分:2)

递归地你可以定义getVariations replacements input

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

这意味着getVariations的定义可能看起来像ike:

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

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

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