【发布时间】:2012-03-11 21:15:00
【问题描述】:
我目前正在处理一个三级流程,我需要一些信息来进行访问和更新。信息也是三级的,这样一个级别的进程可能需要访问/更新其级别和更高级别的信息。
type info_0 = { ... fields ... }
type info_1 = { ... fields ... }
type info_2 = { ... fields ... }
fun0 将使用info_0 做一些事情,然后将它与info_1 一起传递给fun1,然后取回生成的info_0 并继续,调用另一个fun1 和另一个@987654328 @。
同样的情况也发生在较低的级别。
我目前的代理有
type info_0 = { ... fields ... }
type info_1 = { i0: info_0; ... fields ... }
type info_2 = { i1: info_1; ... fields ... }
在fun2 中,更新info_0 变得相当混乱:
let fun2 (i2: info_2): info_2 =
{
i2 with
i1 = {
i2.i1 with
i0 = update_field0 i2.i1.i0
}
}
更简单的是:
type info_0 = { ... fields ... }
type info_1 = { ... fields ... }
type info_2 = { ... fields ... }
type info_01 = info_0 * info_1
type info_012 = info_0 * info_1 * info_2
let fun2 (i0, i1, i2): info_012 =
(update_field0 i0, i1, i2)
最后的解决方案看起来不错吗?
对于这类问题有更好的解决方案吗? (例如,我可以编写一个可以处理更新field0 的函数,无论它是处理info_0、info_1 还是info_2)
OCaml 模块有帮助吗? (例如,我可以在 Sig1 中包含一个 Sig0...)
【问题讨论】:
标签: functional-programming nested ocaml sml records