Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 分析列表haskell的列表_List_Haskell - Fatal编程技术网

List 分析列表haskell的列表

List 分析列表haskell的列表,list,haskell,List,Haskell,您好,我有一个函数,给定一个列表,它返回它的一个子集置换。现在我想做另一个函数,给定一个列表,它使用第一个函数生成另一个列表。更清楚地说: 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] ++ d

您好,我有一个函数,给定一个列表,它返回它的一个子集置换。现在我想做另一个函数,给定一个列表,它使用第一个函数生成另一个列表。更清楚地说:

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
现在我想做一个函数,给出一个列表列表,例如
[[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]]列表中的
generate_permutations2'的第一个参数,即
(++)的第二个参数,即
generate_permutations2[list]'


编译器抱怨generate_permutations2无法处理其输入为空列表的情况。为
generate_permutions2[]
添加一个子句,就像您在
insert
delete
中所做的那样

社论:


如果将类型注释添加到函数中,您的意图会更加清晰。当您告诉GHC顶级类型时,GHC更能找到问题的根源。另外,其他Haskell程序员经常从类型签名推断您在做什么

他需要将它从
[xs:list]
更改为
(xs:list)
。前者仅在包含至少一个元素的单个子列表的列表上匹配,后者在包含至少一个子列表的列表上匹配。我添加了这个generate_permutions2[]=[[]],但我从compiler@bheklilr我改变了你说的,现在它甚至不会编译@JmRag你能提供比“不会编译”更多的信息吗?正如贝克利尔所指出的,
[x:xs]
(具有类型[[a]])与
(x:xs)
(具有类型[a])不同。你是什么意思?
generate_permutations2 [[]] = [[]]
generate_permutations2 (xs:list) = my_permutation  xs (length(xs:list)) (xs:list) ++ generate_permutations2 [list]