0

我有一些类型:

type client =  {nom : nom_client; demande : demande_client}

type itineraire = {num : num_itineraire; 
                   capacite : capacite_itineraire; 
                   liste_clients : client list}

type plan = Vide | Ilist of itineraire list

我可以声明客户和行程,因为我只需要指定参数。但是我不知道将变量声明为计划类型。

类型计划只包含一个行程列表,但这样做:

let myPlan = [(an itineraire here)];;

返回一个行程列表而不是一个计划。

那么如何声明一个 Ilist of itineraire list 的变量呢?

4

2 回答 2

2

您应该使用IList构造函数,该构造函数采用itineraire list类型声明中指示的 as 参数,并返回一个plan.

let my_plan = IList [foo; bar; baz]

请注意,要获取与计划对应的列表,您还需要在此构造函数上进行模式匹配。

let merge_plans p1 p2 = match p1, p2 with
  | p, Vide | Vide, p -> p
  | IList l1, IList l2 -> IList (l1 @ l2)

PS:你真的需要这个case区分吗?您不能将计划简单地定义为列表,并使用空列表而不是Vide

于 2013-06-12T14:47:46.130 回答
1

在我看来,你刚刚被遗漏了Ilist

let myPlan = Ilist [];

每个类型的值都plan具有VideIlist作为其构造函数。这就是定义的意思。

于 2013-06-12T14:47:45.047 回答