此错误发生在我的两个任务上,我不知道该如何解决 帮助
let rec ins (l1, l2) i = match l1 with
| [] -> []
| _ when i>List.length(l1) ->[]
| _ when i=0 -> l2@l1
| _ when i<=List.length l1 && i>0 -> [List.hd l1] @ [ins((List.tl l1), l2) (i-1)];;
ins ([1;2;3;4;5] , [6;7;8;9;10]) 3;;
该代码应该在第n个元素的第1个插入第二个列表
错误消息突出显示了这段代码
[ins((List.tl l1), l2) (i-1)];;
^^^^^^^^^^^^^^^^^^^^^^^^^^^
说
Error: This expression has type 'a list
but an expression was expected of type 'a
The type variable 'a occurs inside 'a list
答案 0 :(得分:1)
这些“发生”错误经常发生,但仍然非常令人困惑。从高层次上讲,这意味着您在同一上下文中使用列表的元素和列表。也就是说,类型系统推断出您的列表由自身组成,是一种Russel's Paradox。
在实践上,这意味着在某个地方使用了表示列表的表达式,而在某个地方应该使用表示列表的元素的表达式(反之亦然)。
在您的情况下,ins((List.tl l1), l2) (i-1)
表达式已经具有类型'a list
,并且您将其放入附加列表[ins((List.tl l1), l2) (i-1)]
中,使其变为'a = 'a list
,这将触发发生错误。
希望,这足以使您修复代码。祝好运! :)