Tag: ocaml

OCaml的并行化能力是怎样的?

我对使用OCaml进行项目感兴趣,但我不确定它的并行化function在哪里。 OCaml中有消息传递的能力吗? OCaml能够有效使用多个CPU吗? 我读到的大部分内容都是在2002 – 2006年写的,而且我还没有看到更近的内容。 谢谢!

在OCaml中Haskell的types类最接近什么?

有什么方法可以完成Haskell的类类在OCaml中的工作? 基本上,我想写一个多态的函数,而不写太多的代码。 做多态的典型方法是提供一个额外的参数,告诉函数是目前正在处理的types。 例如,假设我想对整数列表进行sorting,我必须将一个额外的比较器传递给该函数。 type comparison = Lesser | Equal | Greater my_sort : (a' -> a' -> comparison) -> 'a list -> 'a list 无论如何告诉OCaml,我的types是可比较的,而不用为每种我想要分类的types编写比较器函数? 这意味着我的sortingfunction看起来就像这样: my_sort : 'a list -> 'a list

OCaml:在另一个expression式中匹配expression式?

我目前正在与OCaml一起开展一个小型项目。 一个简单的mathexpression式简化器。 我应该在expression式中find某些模式,并简化它们,以减lessexpression式中括号的数量。 到目前为止,我已经能够实现除了两个以外的大多数规则,为此我决定创build一个recursion的,模式匹配的“filter”函数。 我需要实现的两个规则是: – 将formsa – (b + c)或类似forms的所有expression式转换为a – b – c – 将a /(b * c)或类似forms的所有expression式转换为a / b / c …我怀疑是相当简单的,一旦我设法实现一个,我可以很容易地实现其他。 但是,我遇到了recursion模式匹配function的麻烦。 我的typesexpression是这样的: type expr = | Var of string (* variable *) | Sum of expr * expr (* sum *) | Diff of expr * expr (* difference *) […]

Haskell,Scala,Clojure,高性能模式匹配和并发性select

最近我读了很多关于FP在并发执行和性能方面的优点的博文, 我对FP的需求很大程度上受到我正在开发的应用程序的影响,我的应用程序是一个基于状态的数据注入到另一个时间非常关键(每秒接近200万事务)的子系统。 我有几个这样的子系统需要testing。 我正在认真考虑使用FP来实现并行性,并希望采取正确的方法,很多SO上的文章都谈到了Scala,Haskell和Clojure的语言结构,库和JVM支持的缺点和优点。 从语言的angular度来看,只要能帮助我达到目标,我就可以学习任何语言。 某些post赞同Haskell的模式匹配和语言的简单性,基于JVM的FP lang在使用现有的java库方面有很大的优势。 JaneStreet是OCAML的大支持者,但是我真的不确定开发者支持和帮助OCAML的论坛。 如果有人处理这样的大数据,请分享您的经验。

不纯的function语言OCaml的“let rec”的原因是什么?

在“ Real World OCaml ”一书中,作者提出了为什么OCaml使用let rec来定义recursion函数。 OCaml区分非recursion定义(使用let)和recursion定义(使用let rec)主要是出于技术原因:types推断algorithm需要知道何时一组函数定义是相互recursion的,并且由于不适用于像Haskell这样的纯粹语言,这些都必须由程序员明确标记。 什么是强制执行let rec技术上的原因,而纯粹的function语言呢?

Ocaml和Opam:未绑定的模块核心

我试图build立一个ocaml环境,并且遵循了真实世界Ocamltesting版的附录A的指示。 我设置了opam,并用命令安装了ocaml的一个版本 $ opam switch 4.01.0dev+trunk 通过罚款。 然后我做了一个 $ eval `opam config env` 拉入变革。 我正在运行正确的顶层,如 $ which ocaml 输出 /home/bryan/.opam/4.01.0dev+trunk/bin/ocaml 我使用命令安装了Jane街的Core软件包 $ opam install core ocamlfind和opamsearch都显示该软件包已正确安装。 但是,当我尝试从repl或在文件中打开它,我得到错误“未绑定的模块核心”。 例如 $ ocaml # open Core;; Error: Unbound module Core 有什么我在这里失踪? 为什么不能ocamlfind我安装的模块? 提前致谢。

Fam的度量单位可以在OCaml中实现吗?

F#有一个度量单位的能力 (在这篇研究论文中有更多的细节)。 [<Measure>] type unit-name [ = measure ] 这允许单位被定义如: type [<Measure>] USD type [<Measure>] EUR 和代码写成: let dollars = 25.0<USD> let euros = 25.0<EUR> // Results in an error as the units differ if dollars > euros then printfn "Greater!" 它也处理转换(我猜测这意味着测量有一些定义的函数,让度量值相乘,分割和指数): // Mass, grams. [<Measure>] type g // Mass, kilograms. [<Measure>] type kg let […]

从信号处理程序中调用OCaml包装的ZeroMQ代码

我已经根据http://www.linux-nantes.org/~fmonnier/ocaml/ocaml-wrapping-c.php上的指南为CZMQ写了一些OCaml绑定,这似乎工作得很好。 例如这里是zstr_send: CAMLprim value caml_zstr_send(value socket_val, value string_val) { CAMLparam2 (socket_val, string_val); void *sock = CAML_CZMQ_zsocket_val(socket_val); char *string = String_val(string_val); int rc = zstr_send(sock, string); CAMLreturn (Val_int(rc)); } 我可以在我的大部分代码中使用这些绑定来发送和接收消息。 不过,我有一个场景,我希望做一个信号处理程序的内部发送和接收,在其他代码的背景做消息传递的结尾。 以这个简化的例子: open ZMQ exception SocketBindFailure let bg_ctx = zctx_new ();; let pub_sock = zsocket_new bg_ctx ZMQ_PUB;; let handler _ = print_endline "enter handler"; print_endline (string_of_int […]

什么时候应该在OCaml中使用对象?

通常,一个OCaml程序可以写有或没有对象。 什么时候最有利于使用对象,什么时候应该避免?

OCaml中的80位扩展精度浮点

是否有一个OCaml库可以利用IA-32和x86-64体系结构上的80位扩展精度浮点types? 我知道MPFR绑定,但我理想的库会更轻。 利用历史浮点指令将是理想的。