OCaml-为什么我的函数是';列表->。。。而不是';名单?

OCaml-为什么我的函数是';列表->。。。而不是';名单?,ocaml,Ocaml,当我输入slice[1;2;3;4]12我得到: let rec slice l i k = match l with h::t -> if (k == 0) then h else if (i == 0) then h @ (slice t 0 (k-1)) else slice t (i-1) (k-1);; 但是,如果我输入slice[[1];[2];[3];[4]]12它按预期工作。我不明白为什么OCaml认为l是“a”的列表,而不仅仅是“a”的标准列表?我看到两个问题

当我输入
slice[1;2;3;4]12我得到:

let rec slice l i k = match l with
 h::t -> if (k == 0) then h 
 else if (i == 0) then h @ (slice t 0 (k-1)) 
 else slice t (i-1) (k-1);;

但是,如果我输入
slice[[1];[2];[3];[4]]12它按预期工作。我不明白为什么OCaml认为l是“a”的列表,而不仅仅是“a”的标准列表?

我看到两个问题。在第一种情况下,返回
h
。但是您应该返回一个列表,
h
是列表的第一个元素

在第二种情况下,您使用
@
操作符,它要求两边都有一个列表。但是
h
是列表的第一个元素,而不是列表。您可以使用
而不是
@
来解决此问题

其他问题:

我没有看到一个地方可以处理空列表
l


您应该使用
=
而不是
=
。OCaml中的
=
运算符仅用于非常特殊的目的。对于要使用
=

的日常平等性比较,我发现两个问题。在第一种情况下,返回
h
。但是您应该返回一个列表,
h
是列表的第一个元素

在第二种情况下,您使用
@
操作符,它要求两边都有一个列表。但是
h
是列表的第一个元素,而不是列表。您可以使用
而不是
@
来解决此问题

其他问题:

我没有看到一个地方可以处理空列表
l

您应该使用
=
而不是
=
。OCaml中的
=
运算符仅用于非常特殊的目的。要进行日常平等性比较,请使用
=

Error: This expression has type int but an expression was expected of type 'a list