gpt4 book ai didi

styles - ocaml 样式 : parameterize programs

转载 作者:行者123 更新时间:2023-12-03 23:18:55 30 4
gpt4 key购买 nike

我有一个 OCaml 程序,其中模块有很多依赖于参数的功能,即“维度”。此参数在代码运行开始时确定一次,并保持不变直到终止。

我的问题是:我怎样才能把代码写得更短,这样我的函数就不需要一个“维度”参数。这些模块相互调用函数,因此模块之间没有严格的层次结构(或者我看不到这一点)。

ocaml 风格如何解决这个问题?我必须使用仿函数还是有其他方法?

最佳答案

您可能无法在不破坏模块之间的依赖关系的情况下评估该参数,否则您只需在可以从其他模块访问它的模块之一中定义它。我想到的一个解决方案有点“大胆”。将参数定义为惰性值,并在其中暂停“全局单元”的取消引用:

let hidden_box = ref None
let initialize_param p =
match !hidden_box with None -> hidden_box := Some p | _ -> assert false
let param =
lazy (match !hidden_box with None -> assert false | Some p -> p)

缺点是 Lazy.force param有点冗长。

ETA:请注意,“模块之间没有严格的层次结构”是:
  • 错误,或
  • 你有一个递归模块定义,或
  • 你在某个地方打了一个递归结。

  • 在情况(2)中,您可以将所有内容放入仿函数中。在情况 (3) 中,您已经在传递参数。

    关于styles - ocaml 样式 : parameterize programs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19689805/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com