当您定义一个运算符时,例如
let (++) a b = a :: b
Run Code Online (Sandbox Code Playgroud)
当你这样做时
let v = foo a ++ bar b
Run Code Online (Sandbox Code Playgroud)
bar 在 foo 之前评估。解决方法是使用 let 表达式,即
let e1 = foo a in let e2 = bar b in e1 ++ e2
Run Code Online (Sandbox Code Playgroud)
然而,有时定义一个运算符会很方便,例如它总是从左到右进行计算。有没有办法在 OCaml 中或使用 ppx 或 with 来做到这一点lazy?
我正在做一个项目,我需要尽可能地优化我的代码,因为正常编译需要几个小时才能运行。
有人告诉我使用 Flambda,但我在互联网上没有找到任何有关如何将其与沙丘一起使用的信息。
我希望得到遵循的说明/阅读的资源。
我在OCaml 论坛上寻求一些优化我的代码的建议。我使用了很多Array.setand Array.get(这是我的大部分代码1 2),有人告诉我我可以使用Array.unsafe_getandArray.unsafe_set来获得一些时间。
safe在这种情况下和function有什么区别unsafe?
ocaml ×3
arrays ×1
compilation ×1
evaluation ×1
ocaml-dune ×1
operators ×1
optimization ×1
ppx ×1