代码中的错误此表达式已键入一个列表,但表达式需要类型变量a在列表中出现

问题描述 投票:-1回答:1

我的两个任务发生此错误,我不知道如何解决它请帮助

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
ocaml
1个回答
1
投票

这些“发生”错误经常发生,但仍然非常令人困惑。在较高的层次上,这意味着您在同一上下文中使用列表元素和列表。即,类型系统推断您的列表由其自身组成,一种Russel's Paradox

在实际层面上,它意味着,在某个地方你使用了表示列表的表达式,在一个你应该使用表达列表元素的表达式的地方(或反之)。

在你的情况下,ins((List.tl l1), l2) (i-1)表达式已经具有类型'a list,你将它放入额外的列表[ins((List.tl l1), l2) (i-1)],使其成为'a = 'a list,触发出现错误。

希望,这足以让您修复代码。祝好运! :)

© www.soinside.com 2019 - 2024. All rights reserved.