Ocaml:错误类型

时间:2014-03-10 00:55:33

标签: ocaml

有人可以解释为什么我在这段代码中有错误吗?

需要2个列表a1,a2,a3 ...和b1 b2 b3 ...来生成a1,b1,a2,b2,a3,b3 ......

但出现错误

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

使用示例:append [1; 2; 3] [4; 5; 6];; 这是代码:

let rec append a b = 
if List.length a == 0 && List.length b == 0
then
[]
else
(List.hd a :: List.hd b) :: append (List.tl a) (List.tl b);;

这应该可以正常工作,但它没有...我该如何解决?谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个优先问题。你不能这样写:

(1 :: 2) :: []

::的右手操作数必须是列表。

你必须这样写:

1 :: (2 :: [])

如果删除(List.hd a :: List.hd b)周围的括号,则应该解决此问题。

作为旁注,使用模式匹配比使用List.length,List.hd和List.tl更为惯用。

如果列表长度不同,您的代码应该是什么?