ocaml相关内容

在 OCaml 中的何处放置共享实用程序模块?

我有一个文件 Tools.ml,其中包含我自己编写的一些常用实用程序函数.在 .../Code/ 下,我有几个文件夹,每个文件夹都包含一个项目.我的问题是我应该把这个 Tools.ml 放在哪里,这样 .../Code/ 下的所有文件夹和文件都可以通过 Open Tools. 希望我的问题很清楚...有没有人有好的解决方案? Edit1: 按照@gasche 的回答,我编写了 tool ..
发布时间:2021-12-29 14:02:20 其他开发

OCaml 未绑定图形模块

运行 打开图形;; 在 OCaml 中返回一个错误,说它是一个未绑定的模块.在终端 (ocaml) 中运行它返回相同的结果. 这是否意味着我的图形模块没有与 OCaml 包一起安装?如果是这样,我该如何安装模块? 在 Fedora 上. 解决方案 默认情况下图形模块未就绪.您需要手动加载它.在顶层: $ ocamlOCaml 版本 blahblah# #load "gra ..
发布时间:2021-12-29 13:51:12 其他开发

纯函数式数据结构有什么好处?

有大量关于数据结构的文本,以及数据结构代码库.我知道纯函数式数据结构更容易推理.然而,我很难理解在实际代码中使用纯函数式数据结构(使用或不使用函数式编程语言)而不是命令式对应物的现实优势.有人可以提供一些真实世界的案例,其中纯函数式数据结构具有优势以及为什么? 类似我在programming_language中使用data_structure_name来做应用的例子,因为它可以做certai ..

使用标准输入识别箭头键

是否可以跨平台处理 C 或 OCaml 程序中的退格键和箭头键? 实际上 OCaml 解决方案会受到赞赏,但许多标准的 unix 函数被直接包装到相应的 API 调用中,因此移植 C 解决方案应该没有问题. 我要实现的是捕获箭头键以覆盖其在 shell 内的行为(通过重新传播最后一行或类似的操作).我觉得这个东西在实际程序之前,它不是由代码本身处理的,所以我不知道是否可能. 该程 ..
发布时间:2021-12-21 17:53:35 其他开发

为什么 OCaml/F# 中的函数默认不是递归的?

为什么 F# 和 OCaml(可能还有其他语言)中的函数在默认情况下不是递归的? 换句话说,为什么语言设计者认为在如下声明中显式输入 rec 是个好主意: let rec foo ... = ... 默认情况下不给函数递归能力?为什么需要显式的 rec 构造? 解决方案 原始 ML 的法国和英国后裔做出了不同的选择,他们的选择几十年来一直继承到现代变体.所以这只是遗留问题,但它确 ..
发布时间:2021-12-16 08:28:59 其他开发

在 OCaml 中扩展现有类型

我最近一直在做一些 OCaml 编程来学习这门语言并更熟悉函数式编程.最近,我开始认为我希望能够扩展现有类型(内置类型或我自己的类型),例如: 输入 bexp =和 bexp * bexp|或 bexp * bexp|bexp * bexp 的异或|不是 bexp;; 现在假设我想向这种类型添加一个 Nop 变体,但仅用于新类型 - 有点像继承.嘿,这些应该是代数数据类型,对吧?那么为什么不喜 ..
发布时间:2021-12-14 12:39:39 其他开发

您如何在功能上计算未知大小列表的连续元素之间的差异?

在纯函数式编程语言中(如 Haskell)或仅以函数式方式使用它的编程语言(如 clojure);假设您有一个整数列表/序列/枚举(大小未知),并且您想生成一个包含连续项目之间差异的新列表/序列/枚举,您会怎么做? 我之前在 C# 中所做的是折叠列表并保留一个状态对象作为聚合值,它记录了“上一个"项目,以便您可以对它与当前项目进行比较.结果列表也必须进入状态对象(这是一个未知大小的列表的问题 ..
发布时间:2021-12-14 12:17:59 其他开发

为什么 OCaml 有时需要 eta 扩展?

如果我有以下 OCaml 函数: let myFun = CCVector.map((+) 1);; 它在 Utop 中运行良好,并且 Merlin 不会将其标记为编译错误.但是,当我尝试编译它时,出现以下错误: 错误:这个表达式的类型,(int, '_a) CCVector.t -> (int, '_b) CCVector.t,包含不能泛化的类型变量 如果我对它进行 eta-ex ..
发布时间:2021-12-14 12:05:25 其他开发

在函数式编程中处理增量数据建模变化

作为开发人员,我在工作中必须解决的大多数问题都与数据建模有关.例如,在 OOP Web 应用程序世界中,我经常不得不更改对象中的数据属性以满足新的需求. 如果幸运的话,我什至不需要以编程方式添加新的“行为"代码(函数、方法).相反,我可以通过注释属性 (Java) 来声明性地添加验证甚至 UI 选项. 在函数式编程中,由于模式匹配和数据构造函数(Haskell,ML),添加新数据属性似 ..
发布时间:2021-12-14 12:02:48 其他开发

为什么在 Win64 上没有 OCaml 的二进制分发版?

OCaml 下载页面宣布有四个 Windows 端口可用:Cygwin、Mingw、本机 Win32 和本机 Win64.然而,最新的实际上是不可用的,必须仅从源代码编译. 鉴于 Windows/x86_64 端口已经做了几年,我想知道为什么二进制分发过程没有自动化?该 Ocaml 端口是否存在任何技术限制或错误? 编辑:此问题已在另一个线程 解决方案 我不认为是技术限制的问题 ..
发布时间:2021-11-25 07:03:19 C#

Ocaml:打印出 int 列表数组中的元素

我有一个创建状态的函数.状态定义为: type state = graph * bool array;; 图形是: type graph = int list array;; 图形是一个数组,在每个索引处可能有一个存储在该索引处的 int 列表. 我有一个创建状态的函数,我正在尝试将状态中的元素打印到输出文件中. 我定义的函数如下: let state_of_graph (s ..
发布时间:2021-11-18 00:17:03 其他开发

OCaml 中的 let 绑定和引用有什么区别?

OCaml 教程说引用是“真正的变量",您可以在整个程序中对其进行分配和更改.让绑定不用于相同的目的.在这个 link 中,它说当一个名称由 let 绑定设置时,你不能"...重新分配它以指向不同的小部件."我知道引用实际上存储在内存中,而 let-bindings 不是,但我不明白他们对分配的看法. 在 Ocaml 交互式会话中玩弄,似乎 let-bindings 和引用做同样的事情,但在 ..
发布时间:2021-09-16 18:46:08 其他开发

如何修复此语法错误并改进代码?

我正在做某种滑动拼图游戏的模拟(参见游戏描述https://en.wikipedia.org/wiki/Sliding_puzzle).所以事情是这样的: 首先我创建了一个新类型: type slidePuzzle= {mat: char array array;可变行:int;可变列:int};; row 和 column 代表一个空瓷砖的坐标,mat 是一个拼图. 然后我做 ..
发布时间:2021-09-11 20:16:41 其他开发

ocaml 类型构造函数参数

我这样定义了一个 AVL 树,其中 'a -> 'a -> int 是比较函数 type 'a t = Empty of ('a -> 'a -> int)|'a * 'a t * 'a t * ('a -> 'a -> int) 的节点 我正在尝试使用此 AVL 模块在单独的模块中实现优先级队列. type 'a t = Queue of (Avl.t * int) 但是当我尝试编译时出 ..
发布时间:2021-09-11 20:09:11 其他开发

for循环中的分号单表达式

为什么在下面的代码中Proc.num_stack_slots.(i) 末尾有一个分号?我认为分号是 OCaml 中的分隔符.我们可以总是在块的最后一个表达式中添加一个可选的分号吗? for i = 0 to Proc.num_register_classes - 1 doProc.num_stack_slots.(i) 参见 https://github.com/def-lkb/ocaml- ..
发布时间:2021-09-03 20:37:55 其他开发

OCaml 递归函数:子列表元素乘以它们在列表中的位置,然后求和

我正在尝试创建一个函数,该函数将一个 int 列表作为参数,并返回一个 int 与其在列表中的位置之间的乘积之和.举个例子:multSum [5;11;15] 应该返回 (5 * 1 + 11 * 2 + 15 * 3) = 72. 它应该以递归方式编写,我正在尝试避免使用 List.map 或 List.filter 或任何其他预制函数. 通过划分和控制上面的查询,到目前为止,我已经 ..
发布时间:2021-07-05 19:33:03 其他开发

使用前向递归删除列表元素

我正在编写一个程序,它删除适合谓词的第一个元素,例如. remove' (fun x -> x = 2) [1;3;2;4;2] =>[1;3;4;2] 问题是:如何用正向递归来写?是否可以?使用尾递归,这不是问题.如果它们不适合谓词,我只是将下一个元素添加到 acc. 我在考虑 List.fold_right, 但也许有不同的方法来做到这一点? 解决方案 没有“前向递归"这 ..
发布时间:2021-07-05 19:22:54 其他开发