将OCaml转换为F#: 将OCaml中的open_box和close_box转换为F#

4
我正在将基于OCaml的多个模块转换为F#,遇到了来自OCaml格式化模块的打印格式化函数open_box和close_box。阅读有关打印框概念的文章后,这很有道理,但似乎需要在幕后进行大量工作才能实现。
是否有等效的F#模块?
如果没有,而不必转换OCaml格式模块的部分内容,有哪些快速简单的替换函数?
编辑 Jack 的版本作为OCaml格式的一部分出现在 FSharpx.Compatibility.OCaml.Format.Format.fs 中。我还没有测试过,但它是我目前发现的最完整的版本。

2
你尝试过在 F# 下编译它吗?可能可以直接编译而无需修改。 - Onorio Catenacci
2
@OnorioCatenacci 现在很少有代码可以不经修改就编译通过,而且 Format 模块需要进行数百次更改。在 OCaml 中,索引数组使用 xs.(i),而在 F# 中则使用 xs.[i] 并带有类型注释。原始代码使用的是 OCaml 的流,而在 F# 中没有相应的等价物。通道相当于文本读取器和写入器,但需要进行一些调整。即使 printf 的工作方式也不同! - J D
@OnorioCatenacci,实际上我发现它相当不可预测。就像OP一样,我看到编译器产生了数百个错误,并考虑逃之夭夭。但是,当你认真对待它时,你实际上可以以相当快的速度通过它们,因为它们几乎都是微不足道的更改。 - J D
@JonHarrop 我可能会做,但你是如何处理你提到的OCaml流的? - Guy Coder
1
@GuyCoder 我将其转换为了一个 F# 的 Seq。不过,我可能想到了错误的代码库。最近我为客户将一些其他的 OCaml 代码翻译成 F#。 - J D
显示剩余2条评论
1个回答

4

有没有一个功能等效的F#模块?

没有。

如果没有,那么在不必转换OCaml格式模块的情况下,有哪些快速简单的替代函数?

除了printf之外,没有其他内容。然而,最近我不得不将OCaml的Format模块翻译成F#,只花了几个小时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接