【发布时间】:2014-03-21 20:50:43
【问题描述】:
您好,我有一个函数,它给定一个列表,它返回它的排列子集。现在我想创建另一个给定列表列表的函数,它使用第一个函数生成另一个列表列表。为了更清楚:
delete x [] = []
delete x (y:xs) = if (x==y) then (delete x xs)
else (y:delete x xs)
insert x n [] = []
insert x n xs = take (length xs - n) xs ++ [x] ++ drop (length xs - n) xs
insert_and_delete x n xs= [insert x n (delete x xs)]
my_permutation x 0 list = insert_and_delete x 0 list
my_permutation x n list = insert_and_delete x n list ++ my_permutation x (n-1) list
--n is lenght of list
my_permuation 5 4 [5,1,1,1] [[5,1,1,1],[5,1,1,1],[1,5,1,1],[1,1,5,1],[1,1,1,5]] my_permutation 3 3 [3,1,1] [[3,1,1],[1,3,1],[1,1,3]]
现在我想创建一个函数,给出一个列表列表,例如[[5,1,1,1] , [3,1,1]],它将返回一个包含上面所有结果的列表:
[[5,1,1,1],[5,1,1,1],[1,5,1,1],[1,1,5,1],[1,1,1,5],[3,1,1],[1,3,1],[1,1,3]]
到目前为止我的尝试:
generate_permutations2 [xs:list] = my_permutation xs (length(xs:list)) (xs:list) ++ generate_permutations2 [list]
但是当我尝试调用它时,我得到:
generate_permutations2[ [2,1,1], [3,1]]
Exception: Non-exhaustive patterns in function generate_permutations2
如果更改参数并添加基本情况,请编辑:
generate_permutations2 [[]] = [[]]
generate_permutations2 (xs:list) = my_permutation xs (length(xs:list)) (xs:list) ++ generate_permutations2 [list]
发生检查:无法构造无限类型:t0 = [t0] 预期 类型:[t0] 实际类型:[[t0]] 表达式中:list 中
generate_permutations2', namely[list]' 的第一个参数(++)', namelygenerate_permutations2 [list]'的第二个参数
【问题讨论】: