我的两个任务发生此错误,我不知道如何解决它请帮助
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个中插入第2个列表
错误消息突出显示这段代码
[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
这些“发生”错误经常发生,但仍然非常令人困惑。在较高的层次上,这意味着您在同一上下文中使用列表元素和列表。即,类型系统推断您的列表由其自身组成,一种Russel's Paradox。
在实际层面上,它意味着,在某个地方你使用了表示列表的表达式,在一个你应该使用表达列表元素的表达式的地方(或反之)。
在你的情况下,ins((List.tl l1), l2) (i-1)
表达式已经具有类型'a list
,你将它放入额外的列表[ins((List.tl l1), l2) (i-1)]
,使其成为'a = 'a list
,触发出现错误。
希望,这足以让您修复代码。祝好运! :)