Haskell 从两个列表进行排列,但不使用完整数字

Haskell 从两个列表进行排列,但不使用完整数字,haskell,permutation,Haskell,Permutation,我想从两个列表中创建一个所有可能排列的列表。不过,我不想把全文都写下来。 例如,第一个列表是[a,e,i,ou],第二个列表是[1,2,3,4,5] 然后其中一个结果会像[[a,1,i,2],[u,4,e,s].] 我在上面做了这个函数,很抱歉图像不好。我终于能够弄明白如何不把代码放在问题中,但它需要太长的时间才能得到结果。 我怎样才能做得更好?只是提醒你,我是一个编程初学者 并且,输出是: > listsOfPossibilitiesN [1,2,3,4,5,6,7,8,9,10] [

我想从两个列表中创建一个所有可能排列的列表。不过,我不想把全文都写下来。 例如,第一个列表是[a,e,i,ou],第二个列表是[1,2,3,4,5] 然后其中一个结果会像[[a,1,i,2],[u,4,e,s].]

我在上面做了这个函数,很抱歉图像不好。我终于能够弄明白如何不把代码放在问题中,但它需要太长的时间才能得到结果。 我怎样才能做得更好?只是提醒你,我是一个编程初学者

并且,输出是:

> listsOfPossibilitiesN  [1,2,3,4,5,6,7,8,9,10] [100,200,300,400,500,600,700,800,900,1000]
[[1,100,2,200,3,300,4,400,5,500],[1,100,2,200,3,300,4,400,5,600],[1,100,2,200,3,300,4,400,5,700],[1,100,2,200,3,300,4,400,5,800],[1,100,2,200,3,300,4,400,5,900],[1,100,2,200,3,300,4,400,5,1000],[1,100,
2,200,3,300,4,400,6,500],[1,100,2,200,3,300,4,400,6,600],[1,100,2,200,3,300,4,400,6,700],[1,100,2,200,3,300,4,400,6,800],[1,100,2,200,3,300,4,400,6,900],[1,100,2,200,3,300,4,400,6,1000],[1,100,2,200,3,
300,4,400,7,500],[1,100,2,200,3,300,4,400,7,600],..]

猜测一下当前代码的功能,下面是一个算法建议:

不确定地选择元音的排列 为排列指定索引 使用标准尾部技巧可以不确定地从此列表中选择适当数量的元素 代码:

import Data.List

choose :: Int -> [a] -> [[a]]
choose 0 xs = [[]]
choose n xs = do
    x:xs' <- tails xs
    (x:) <$> choose (n-1) xs'

assignments :: Int -> [a] -> [[(Int, a)]]
assignments n xs = do
    xs' <- permutations xs
    choose n (zip [1..] xs')

请包含您所问的代码,而不是代码的图像。尤其是不要包含到目前为止无法读取的缩小规模的代码图像。此外,输出不能是[[a,1,i,2],[u,4,e,s]…],因为Haskell列表中的元素都具有相同的类型。另外,排列是什么意思?[1,2,3,4]是否为有效输出?如果是这样,只需合并列表并找到可能的组合
import Data.List

choose :: Int -> [a] -> [[a]]
choose 0 xs = [[]]
choose n xs = do
    x:xs' <- tails xs
    (x:) <$> choose (n-1) xs'

assignments :: Int -> [a] -> [[(Int, a)]]
assignments n xs = do
    xs' <- permutations xs
    choose n (zip [1..] xs')
> mapM_ print (assignments 2 "abc")
[(1,'a'),(2,'b')]
[(1,'a'),(3,'c')]
[(2,'b'),(3,'c')]
[(1,'b'),(2,'a')]
[(1,'b'),(3,'c')]
[(2,'a'),(3,'c')]
[(1,'c'),(2,'b')]
[(1,'c'),(3,'a')]
[(2,'b'),(3,'a')]
[(1,'b'),(2,'c')]
[(1,'b'),(3,'a')]
[(2,'c'),(3,'a')]
[(1,'c'),(2,'a')]
[(1,'c'),(3,'b')]
[(2,'a'),(3,'b')]
[(1,'a'),(2,'c')]
[(1,'a'),(3,'b')]
[(2,'c'),(3,'b')]