有人可以解释为什么我在这段代码中有错误吗?
需要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);;
这应该可以正常工作,但它没有...我该如何解决?谢谢!
答案 0 :(得分:1)
这是一个优先问题。你不能这样写:
(1 :: 2) :: []
::
的右手操作数必须是列表。
你必须这样写:
1 :: (2 :: [])
如果删除(List.hd a :: List.hd b)
周围的括号,则应该解决此问题。
作为旁注,使用模式匹配比使用List.length,List.hd和List.tl更为惯用。
如果列表长度不同,您的代码应该是什么?