我有点困惑,因为编译器告诉我1, [5;2]
对于这两种情况都不是一个元组:
(1,[5;2])::[6,[5;1]; 2,[16;1]]
这不起作用(为什么?)
1,[5;2]::[6,[5;1]; 2,[16;1]]
我问这个是因为我需要解决我的问题:
type node = int
type edge = node * node
type graph = (node * node list) list
let has_node g n = List.exists ((=) n) g
let insert_node g n =
if has_node g n then g else (n, [])::g (*here is where the compiler complains*)
答案 0 :(得分:3)
::
的优先级高于,
。因此,您的第二行不会定义与第一行相同的值。相反,它定义1,([5;2]::[6,[5;1]; 2,[16;1]])
。
您的代码存在的问题是,has_node
要求列表g
包含n
类型的元素,而(n,[])
属于不同类型。