ocaml相关内容

OCaml类型推理,一个具体的例子

我正在阅读包含以下示例的Ocaml笔记: let o f g x = (f (g (x)));; val o : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b = 注释中没有关于类型推断的解释。在我的理解中,('a -> 'b)对应g(x),('c -> 'a)对应f()。我说的对吗?此外,'b对应于整个函数的输出。‘c对应于什么?如果有关于此类型 ..
发布时间:2022-09-22 20:27:30 其他开发

Ocaml中的异常Stack_Overflow&Quot;

我想问一下会不会是死循环导致的异常:“ExeptionStack_Overflow”,特别是下面的代码中出现了这个异常: ( *the loop "while" should stop when both stacks are empty*) while (not (Stack.is_empty stackFalse) )|| ( not (Stack.is_empty st ..
发布时间:2022-08-05 09:30:13 其他开发

OCaml;Else;语法错误(&Q)

我是第一次学习OCaml,我遇到了一个非常模糊的“语法错误”。 定义函数generateboxes时如下: let rec generateboxes a b = if a = (add1 b) then (force_newline ()); (print_sting "Done!") else if [1] = (Array.get finalarray a) then ..
发布时间:2022-08-02 23:43:46 其他开发

平面列表和免费单元格

我试图说服自己,List Monad(具有平面列表、列表连接和映射元素的Monad)不是自由Monad(准确地说,是与某个函数器T关联的自由Monad)。据我所知,我应该能够在 年实现这一目标。 首先在单体列表中查找常用运算符FMAP、Join等之间的关系 然后证明了这种关系不存在于函子T上的任何自由单子中,对于所有T 列表单子中的特殊关系是什么,使其有别于自由单子?如果我不知 ..
发布时间:2022-06-29 13:45:20 其他开发

为什么ocaml有可变数组?

为什么Ocaml有可变数组?据我所知,函数式编程是为了将副作用降到最低。可变(edit:)数组是否与此想法相反? 即使字符串在Ocaml中也是可变的,这在Python中甚至不是这样的,或者OCaml不被视为纯函数式语言吗? 推荐答案 OCaml不是纯函数式语言,TRUE。它有一个纯功能子集,但支持突变和许多命令性构造(以及可变的OO对象)。我的重点是允许程序员在为函数式编程提供极 ..
发布时间:2022-03-04 15:42:26 其他开发

OCaml正则表达式在尝试使用转义字符时出现错误

我正在尝试使用OCaml为C语言变体编写词法分析器。对于词法分析器,我需要匹配字符串“^”和“||”(分别作为指数和/或符号)。这两个字符都是regex中的特殊字符,当我尝试使用反斜杠对它们进行转义时,没有任何变化,代码运行起来就好像“^”仍然是行的开头,“||”仍然是“or或”。我可以做些什么来修复此问题? 推荐答案 字符串中的反斜杠字符必须加倍才能通过OCaml字符串解析器: ..
发布时间:2022-03-04 15:34:05 其他开发

OCaml色彩控制台输出

是否可以在Windows上使用OCaml对控制台输出进行着色? 在Linux终端上似乎可以:print_string "27[31m blabla"但我找不到任何有关Windows控制台的信息。 推荐答案 使用Vanilla窗口工具.. 默认情况下,无法使用命令(Ms Dos)控制台仿真进行颜色管理。 开箱即用,您可以获得的最佳效果是改用PowerShell命令行界 ..
发布时间:2022-03-04 15:30:57 其他开发

这种模式匹配在OCaml中并不详尽

我是OCaml的新手,我编写了一些代码来获取列表的n元素 let rec n_elem l n = match n with | 0 -> match l with | h::_ -> h | _ -> failwith "erorr with empty list" | _ -> match l with | h::t -> n_elem t (n-1) | ..
发布时间:2022-03-04 15:28:32 其他开发

如何缩进现有的OCaml代码

我有大约30.000行缩进严重的OCaml代码(包括mly和mll文件),我想缩进它们。我试着在谷歌上搜索“ocaml缩进”的变体,我能得到的最接近的结果是使用Omlet.vim,一次缩进一行代码(在插入模式下通过C-f)。有没有办法缩进所有的30000行? 推荐答案 我使用Emacs作为编辑器,安装了此软件包: http://caml.inria.fr/pub/docs/u3- ..
发布时间:2022-03-04 15:21:25 其他开发

OCaml中二叉树的尾递归最大元素

我正在练习尾递归,并且我想这样做,给定类型 type 'a tree = Leaf of 'a | Pair of 'a tree * 'a tree 和查找二叉树中最大元素的函数 let rec tree_max t = match t with | Leaf v -> v | Pair (l,r) -> max (tree_max l) (tree_max ..
发布时间:2022-03-04 15:18:12 其他开发

修复OCaml中的数据类型

如何使用OCaml或SML表示来自Haskell的以下数据类型? newtype Fix f = In (f (Fix f)) 推荐答案 我已经answered this question on the mailing-list了(我必须说,您在两个不同的地方问这个问题没有几天的好时间,我有点不高兴,因为这可能会引起重复的努力),但是让我们在这里重复一下。 这里有一个困难,因为O ..
发布时间:2022-03-04 15:12:08 其他开发

如何在OCaml中创建自定义数据类型的实例?

如果我有一个自定义数据类型“Triple”,如下所示,我将如何创建可以使用的它的实例? type triple = int * int * int 谢谢! 推荐答案 这里有一个实例: let my_instance = (1, 2, 3) 不管怎么说,您的类型不是新类型,它只是以前存在的类型的一个方便的缩写,它是一个由3个整数组成的元组。没有构造函数的类型声明只是 ..
发布时间:2022-03-04 15:09:16 其他开发

对具有更多限制的默认值的可选参数强制使用更宽的类型

有没有一种方法可以使可选参数f足够灵活,使其具有类型'a -> 'b,同时仍将其默认为identity,因为identity具有类型'a -> 'a? An earlier question以准确地说明我的问题开始: 我想定义一个接受可选参数的函数,该参数是 函数(‘a->’b)。默认值应为标识,该标识 实际上是(‘a->’a),但我看不出为什么不应该是 与更通用的(‘a->’b)兼容 ..
发布时间:2022-03-04 15:00:14 其他开发

字符串的OCaml函数参数模式匹配

我试图传入一个字符串以获得反转的字符串。为什么我不能这样做: let rec reverse x = match x with | "" -> "" | e ^ s -> (reverse s) ^ e;; 编译器说这是一个语法错误。我不能使用^来分解参数吗? 推荐答案 原因是字符串没有以与列表相同的方式表示为数据类型。因此,虽然cons(::)是一个构造函数, ..
发布时间:2022-03-04 14:57:35 其他开发