List 我应该如何初始化元组列表

List 我应该如何初始化元组列表,list,initialization,tuples,ocaml,List,Initialization,Tuples,Ocaml,我有一个函数,它获取一个元组列表,并对其进行处理以获得一个包含3个整数的元组。 我现在想用我创建的元组类型的列表来测试它,但是我无法创建这个列表 这是我的元组类型: typet_voates={valeur:string;nombre:int};; 以下是我的功能: 让记录重述(l:t_投票列表):int*int*int= 让(nb_oui,nb_non,nb_blanc)=在 如果(l=[]),那么 (0,0,0) 否则如果((hd(l)).valeur=“oui”)那么 (nb_oui+(

我有一个函数,它获取一个元组列表,并对其进行处理以获得一个包含3个整数的元组。 我现在想用我创建的元组类型的列表来测试它,但是我无法创建这个列表

这是我的元组类型:

typet_voates={valeur:string;nombre:int};;
以下是我的功能:

让记录重述(l:t_投票列表):int*int*int=
让(nb_oui,nb_non,nb_blanc)=在
如果(l=[]),那么
(0,0,0)
否则如果((hd(l)).valeur=“oui”)那么
(nb_oui+(hd(l))。名称、nb_non、nb_blanc)
否则如果((hd(l)).valeur=“非”),则
(nb_oui,nb_non+(hd(l))。名称,nb_blanc)
否则如果((hd(l)).valeur=“blanc”),则
(nb_oui,nb_non,nb_blanc+(hd(l)).名称)
其他的
失效(“失效名单”)
;;
下面是我徒劳地试图声明一个列表来测试我的函数:

let liste_vows:t_vows list=[(“oui”,120);(“non”,18);(“blanc”,20);(“oui”,20);(“non”,24);(“blanc”,25)];;
重述(列出选票);;
以下是图阿雷格人给我的:

#让我们来投票:投票名单=[(“oui”,120);(“non”,18);(“blanc”,20);(“oui”,20);(“non”,24);(“blanc”,25)];;
字符34-45:
让我们来投票:投票名单=[(“oui”,120);(“non”,18);(“blanc”,20);(“oui”,20);(“non”,24);(“blanc”,25)];;
^^^^^^^^^^^
错误:此表达式的类型为“a*”b
但应使用t_vots类型的表达式

要创建记录类型的值(因为它是记录类型而不是元组,元组不命名其参数),语法如下:

{valeur=“Some string”;nombre=13}
如果此语法对您来说太重,通常的做法是编写生成器函数:

让mk_投票给valeur nombre={valeur;nombre}
这里我使用另一种语法来实例化记录值,而不使用
=
符号。在这种情况下,它与编写
valeur=valeur
nombre=nombre
相同

然后你可以写:

让投票=[mk_投票“oui”120;mk_投票“non”18;mk_投票“blanc”20;mk_投票“oui”20;mk_投票“non”24;mk_投票“blanc”25]
让mk_投票(valeur,nombre)={valeur;nombre}
也可以让你写作

let voates=List.map mk_vote[(“oui”,120);(“non”,18);(“blanc”,20);(“oui”,20);(“non”,24);(“blanc”,25)]

对于某些记录类型的
vote
,您可以使用
vote.valeur
vote.nombre
访问字段。 您还可以使用模式匹配:

将投票与
|{valeur=v;nombre=n}=>(*…*)
您还可以从另一个记录值生成记录值,如下所示:

let vote={valeur=“Some string”;nombre=13}
让我们在中投票“={用valeur=”其他字符串“}
(* ... *)
然后
vote.valeur
“其他字符串”
,而
vote.nombre
vote.nombre
, 或者在这种情况下是
13


最后,我忍不住注意到您使用字符串来表示不同类型的投票,因为似乎只有三种情况,所以专用类型更为相关(毕竟您使用的是ocaml,它可以让您正确处理数据)

类型投票\u种类=
|对
|没有
|空白
类型t_投票={
价值观:投票表决;
金额:整数;
}

感谢您对记录类型和元组的澄清。难道没有办法在列表中更快地创建它们吗?我应该创建一个生成随机数的函数,并将它们添加到列表中,以获得我正在寻找的结果吗?