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