List 从字母表生成所有单词

List 从字母表生成所有单词,list,haskell,sequence,List,Haskell,Sequence,我想从给定的字母表中生成所有单词。例如: ['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

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

['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]s

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

myfunc :: [a] -> [[a]]
myfunc l = []:[(x:ys) | ys <- myfunc l, x <- l]
代码的工作原理如下,我们发出的第一个元素是空字符串[]中的[]部分:。。。。这将是我们发出的第一个结果,也是递归结果中的第一个


现在在列表理解部分,我们迭代myfunc l的所有元素,因此第一个ys是空列表,我们用字母表a和b的所有字符作为该元素的前缀。下一个ys将是[a],因此我们在alpabeth的字符前面加上它,依此类推。

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

此外,myfunc的签名应为[a]->[a]]。事实上,列表中的元素也是字符串,因此[a]s

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

myfunc :: [a] -> [[a]]
myfunc l = []:[(x:ys) | ys <- myfunc l, x <- l]
代码的工作原理如下,我们发出的第一个元素是空字符串[]中的[]部分:。。。。这将是我们发出的第一个结果,也是递归结果中的第一个


现在在列表理解部分,我们迭代myfunc l的所有元素,因此第一个ys是空列表,我们用字母表a和b的所有字符作为该元素的前缀。下一个ys将是[a],因此我们在alpabeth的字符前面加上它,以此类推。

@melpomene:我认为OP并不意味着子列表。他们想要生成由字母ab组成的所有可能的序列。。对不起,我错了。。我换了房间text@melpomene:我认为OP不是指子列表。他们想要生成由字母ab组成的所有可能的序列。。对不起,我错了。。我改了短信我没看到。。。谢谢你的帮助和解决方案。我没看到。。。感谢您的帮助和解决方案。