Ocaml 打印字典的多行

Ocaml 打印字典的多行,ocaml,Ocaml,假设我定义类型 type person = { last_name: string; first_name: string; age: int};; let person1 = {last_name="Doe"; first_name="John"; age=30};; 如何打印 Last name : Doe First name : John Age : 30 我想用 match person1 with | {last_name=ln; first_name=fn; age=a} -

假设我定义类型

type person = { last_name: string; first_name: string; age: int};;
let person1 = {last_name="Doe"; first_name="John"; age=30};;
如何打印

Last name : Doe
First name : John
Age : 30
我想用

match person1  with
| {last_name=ln; first_name=fn; age=a} -> print_string ...;;
但这似乎不是解决问题的办法。如果
person1
person
被定义为一个包含1000个元素的字典,那么该解决方案不适用


有没有更好的方法来挑战这个问题?请注意,我必须使用功能范式。所以我不能用
而直接循环
来回答你的问题,因为你似乎同时有两种不同的想法。你不能同时拥有一个记录和一个字典。这是不可能的

一般来说,字典是事物的集合。OCaml中集合的约定是,它们有一个名为
iter
的函数来遍历集合

假设您有一个由模块
C
定义的抽象集合。通常,每个集合都有一个类型
'a C.t
,其中
'a
是集合元素的类型。您还将拥有(常规)此类型的函数
C.iter

C.iter : ('a -> unit) -> 'a C.t -> unit
这意味着您可以将一个函数(如打印函数)传递给
C.iter
,然后还可以传递一个集合。
iter
函数将遍历集合,并为每个元素调用函数

在您的例子中,模块
C
将定义您想象的字典,类型
person C.t
将是您上面显示的记录的字典类型。函数
C.iter
的类型为
(person->unit)->person C.t->unit
。换句话说,它将接受一个函数,并将其一个接一个地应用于字典中的所有人


除非我们知道您计划创建的词典的详细信息,否则我们不能说更多。

如果是
person
类型的词典,那么
person1
怎么可能是一个包含1000个元素的词典呢?你只是想找个方法方便地打印任何东西以进行调试吗?@glennsl我知道,但假设类型
person
也是一个包含1000个元素的字典。在我的主代码中,我有25个元素,所以使用match/with似乎不是很好。我只想遍历该字典并以自定义方式打印每个元素。。。就像你在地图上看到的一样question@glennsl您似乎对ocaml有一些很好的体验。你有办法解决我的问题吗?请注意,我必须使用功能范式。因此,我不能直接使用
for
循环。您可以直接访问记录字段,例如,
person1.last\u name
。不需要使用模式匹配。不清楚“遍历字典并以自定义方式打印每个元素”是什么意思。当您迭代每个字段以进行自定义打印时,您希望如何区分每个字段以及每个字段的类型?我指的是一条记录。我认为记录与字典(类似于Python编程)是一样的。记录与任何语言的字典(IMHO)都不一样。记录由少量命名值组成。字典由任意值的开放式集合组成,每个值由一个键访问。在使用任意字段名实现记录的语言中存在一些重叠。但是OCaml中的字段名是提前固定的。所以没有重叠。我想这个问题适合你。如果你有时间的话,我已经修改了我的问题。我有一个开始的答案,但我不知道如何继续。有一段时间我一直在努力,但我不能完成它。你能帮我一点忙吗?查看上面的链接以查看更新