![](/img/trans.png)
[英]Generate a list of weighted words from a .txt file randomly with Python
[英]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
是空列表),然后在该元素之前加上字母的所有字符( a
和b
)。 接下来ys
将是[a]
所以我们预先设置alpabeth的人物了,并且依此类推。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.