Types 声明一个没有参数的类型
我有一些类型:Types 声明一个没有参数的类型,types,ocaml,declaration,Types,Ocaml,Declaration,我有一些类型: 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
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
我可以声明客户机和行程,因为我只需要指定参数。
但是,我不知道如何将变量声明为plan类型
类型计划仅包含行程列表,但执行以下操作:
let myPlan = [(an itineraire here)];;
返回行程列表而不是计划
那么如何声明行程列表的Ilist变量呢?在我看来,您刚刚遗漏了
Ilist
let myPlan = Ilist [];
plan
类型的每个值都有Vide
或Ilist
作为其构造函数。这就是定义的含义。在我看来,您刚刚遗漏了Ilist
let myPlan = Ilist [];
plan
类型的每个值都有Vide
或Ilist
作为其构造函数。这就是定义的含义。您应该使用IList
构造函数,它将行程列表
作为类型声明中指示的参数,并返回计划
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)
附言:你真的需要区分这种情况吗?您不能简单地将计划定义为列表,并使用空列表而不是
Vide
?您应该使用IList
构造函数,该构造函数将行程列表
作为类型声明中指示的参数,并返回计划
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)
附言:你真的需要区分这种情况吗?您不能简单地将计划定义为列表,并使用空列表代替查看