繁体   English   中英

生成字母表中的所有单词

[英]Generate all words from an alphabet

我想从给定的字母生成所有单词。 例如:

['a', 'b'] -> ["","a","b","aa","ba","ab","bb","aaa","baa","aba","bba","aab" ...]

我现在设法实现此功能:

myfunc :: [a] -> [[[a]]]
myfunc l = iterate fromList $ map (\x -> x : []) l
  where
    fromList ls = [y : ys | y <- l, ys <- ls]

但是此函数不能正确生成结果。 我希望答案是一个字符串,例如仅采用前5个元素-> ["","a","b","aa","ba"] 有什么帮助吗?

根据您的示例,您不会生成子列表:而是从给定的字母l生成字符串序列

此外, myfunc的签名应为[a] -> [[a]] 实际上,列表的元素也是字符串,所以[a]

您可以为此使用递归列表理解:

myfunc :: [a] -> [[a]]
myfunc l = []:[(x:ys) | ys <- myfunc l, x <- l]

会产生:

*Main> take 10 $ myfunc "ab"
["","a","b","aa","ba","ab","bb","aaa","baa","aba"]

该代码的工作方式如下,我们发出的第一个元素是空字符串( []:...[]部分)。 因此,这将是我们发出的第一个结果(也是递归结果中的第一个)。

现在,在列表理解部分中,我们遍历myfunc l所有元素(因此,第一个ys是空列表),然后在该元素之前加上字母的所有字符( ab )。 接下来ys将是[a]所以我们预先设置alpabeth的人物了,并且依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM