问题标签 [ocaml-batteries]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ocaml - OCaml 中的整数范围错误
最近我必须阅读一些用 OCaml 编写的源代码。在阅读了有关 OCaml 的资料后,我开始阅读源代码。当我编译源代码时,出现了问题。编译器说错的部分如下:
让 b = [| 0x2; 0xc; 0xf0; 0xff00; 0xffff0000; 0x7ffffff00000000 |]
错误消息说这是一个整数范围问题。我知道 OCaml 中的整数范围是 -2^30 ~ 2^30 - 1 ,因此导致了这个问题。但是源代码来自其他人可以使用的项目。我怎样才能正确编译它?有人可以告诉我一些细节吗?
ocaml - 不理解 OCaml 中的符号
这些天我正在通过一些基本的材料和一个用 OCaml 编写的项目来学习 OCaml。但我不明白 OCaml 中的一些符号。例如:
这些带有符号`的东西是什么意思?
我也很难理解其他符号:
- |>
- _
我在OCaml Manual中找不到任何内容。有人可以解释有关上述符号的更多详细信息吗?或者只是向我推荐一些材料?
data-structures - OCaml 中用于频繁重新调度的排队的快速函数数据结构
我的问题是为基于事件的模拟选择数据结构。
N 个未来事件连同它们的发生时间一起被维护。N 是固定的或至少是有界的,范围从 10 到可能 10000。每个事件都有一个唯一的 ID,除了时间之外,原则上可以通过该 ID 检索它。
在一个循环中,会发生以下情况。下一个发生的事件被移除并执行,并生成一个随机未来时间的同类新事件来替换它。作为副作用,一些 (<10) 现有事件改变了它们的发生时间,需要重新安排。这些要重新安排的事件的 ID 是已知的,但不知道它们的发生时间。
我认为堆可以快速获得最低元素,但我还需要快速重新排序通过 ID 访问的任意元素。有BatHeap在 O(log N) 中查找元素和插入,但似乎不允许索引访问?
我更喜欢持久结构(部分用于教育目的),但如果只有可变结构可以快速运行,我会使用它。
ocaml - 如何在 OCaml 中同时使用衍生和电池?
所以基本上在我的项目中,我需要同时使用batteries
(forFile.lines_of
和其他相关函数) 和deriving
(for Show.show
)。
但是,当我在我的 Mac 上opam
安装包deriving
时,它似乎会首先删除batteries
包,然后它会开始安装deriving
..
并且在使用安装时batteries
,opam
它会首先删除deriving
...
我的配置有什么问题吗..?或者这只是正常情况..?那我怎么能同时使用batteries
和deriving
呢?
ocaml - 如何防止 OCaml 电池覆盖值
包 Batteries.Num 覆盖了函数 (+), (-), ... 所以编译器在下面的简单代码上给出了错误
文件“a.ml”,第 3 行,字符 8-9:错误:此表达式的类型为 int,但表达式应为 Batteries.Num.num = Num.num 类型
我用“ocamlfind ocamlc -package battery a.ml”编译。
编辑:我知道我可以使用 Pervasives.(+) 或者只是在本地打开 Num。
但是我可以使用 ocamlbuild 使用最简单的 _tags 文件成功编译该程序:<*>: pkg_batteries, package(batteries), package(num)
魔法在哪里?如何像 ocamlbuild 一样使用 Makefile 进行编译?
编辑:我找到了解决方案。我实际上有两个版本的电池(1.4 和 2.2),ocamlfind 在命令行上给出了 2.2 版本,在 ocamlbuild 上给出了 1.4。我不知道为什么。我相信早期版本的电池没有重新定义模块 Num(但您必须使用 BatNum),因此旧版本不会出现问题。感谢您的回答。
ocaml - 构建使用列表推导的 OCaml 代码
从这个 SO 问题:Ocaml 中的列表理解?,我可以使用 安装理解包opam install pa_comprehension
,并在顶级 REPL 中使用该包。
那么,我该如何编译代码呢?
ocaml - 将电池相关文件加载到 ocamltop 中——接口不一致
这是一个简单的 ocaml 文件,只是为了让我了解如何将使用电池库的程序加载到 ocamltop 中。
电池突击.ml
我将其编译为字节码
产生了batteryassault.cmo 和batteryassault.cmi,没有错误也没有警告。然后,我启动电池供电的 ocamltop
最后,在 ocamltop 中加载文件:
然后我们得到一个错误。
文件 batteryassault.cmo 和 /usr/lib/ocaml/batteries/batteries.cma 在接口电池上存在分歧
我认为可能发生的情况是 Ubuntu 安装了电池 2.2.1,但由于某种原因(安装 merlin?)我的 opam 文件夹中安装了电池 2.3.1,此外,当使用上述电池启动 ocamltop 时,它表示 ocamltop 使用的是 2.2.1 版本。此外,编译
我发现 ocamlc 肯定是在使用 opam 中的库,即 2.3.1 版本。
所以我的问题是:什么是/是否有解决方法?
functional-programming - 如何在 OCaml 中查找 Array 元素的索引
我正在尝试在 ocaml 中查找整数数组元素的索引。如何递归地做到这一点。示例代码:let a = [|2; 3; 10|];;
假设我想返回数组 a 中 3 的索引。任何帮助表示赞赏。我是 OCaml 编程的新手
functional-programming - OCaml中排序数组内的二进制搜索
我正在尝试在 OCaml 中进行二进制搜索。这段代码有什么问题?它总是返回-1。它是一个字符串数组,因此比较元素会给出值 0、-1 或 1,如果它们相等,则第一个元素较小和第一个元素分别较大(文档说正整数和负整数,但我已经在解释器中测试并收到 1 和 -1 )。关于我在这里犯的错误的任何提示?
ocaml - ocaml 电池未绑定 toploop 错误
我正在尝试按照 Ubuntu 14.04 中的 ropc/bap/INSTALL 中给出的说明安装 ropc https://github.com/pakt/ropc所需的 bap。我已经成功运行了这些命令。
现在,当我进入 bap 目录时,我收到以下 Unbound module toploop 错误,这似乎是电池和 ocaml 之间的兼容性问题。我该如何解决这个问题?请查看图片了解更多详情
我读到我应该在某处添加-I +compiler-libs 。但具体在哪里?我没有使用 ocaml 的经验,我只是想成功构建 ropc。