将元组插入Ocaml列表

时间:2017-03-25 14:40:34

标签: list ocaml

我有点困惑,因为编译器告诉我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*)

1 个答案:

答案 0 :(得分:3)

::的优先级高于,。因此,您的第二行不会定义与第一行相同的值。相反,它定义1,([5;2]::[6,[5;1]; 2,[16;1]])

您的代码存在的问题是,has_node要求列表g包含n类型的元素,而(n,[])属于不同类型。