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中的字段名是提前固定的。所以没有重叠。我想这个问题适合你。如果你有时间的话,我已经修改了我的问题。我有一个开始的答案,但我不知道如何继续。有一段时间我一直在努力,但我不能完成它。你能帮我一点忙吗?查看上面的链接以查看更新