创建可能的字符串变体数组
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)
,合并以下结果:
- 用
replacements
中的字符替换 a
- 保持
a
不变并在 as
上执行 getVariations
这意味着 getVariations
的定义可能类似于:
getVariations replacements [] = ...
getVariations replacements (a:as) = ...#1... ++ ...#2...
这也可能有助于确定 getVariations
的类型:
getVariations :: String -> String -> ???
我想弄清楚如何通过用另一个数组中的不同字符一次替换字符串中的一个字符来创建字符串的变体。
例如:
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)
,合并以下结果:- 用
replacements
中的字符替换 - 保持
a
不变并在as
上执行
a
getVariations
- 用
这意味着 getVariations
的定义可能类似于:
getVariations replacements [] = ...
getVariations replacements (a:as) = ...#1... ++ ...#2...
这也可能有助于确定 getVariations
的类型:
getVariations :: String -> String -> ???