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对应于什么?如果有关于此类型
..
如何调用以下函数才能计算从1到100的数字? type 'a llist = Cons of 'a * (unit -> 'a llist) let rec lnat n = Cons (n, fun () -> lnat (n+1)) 调用lnat 1给我以下信息: lnat 1;; - : int llist = Cons (1, ) 但如何计算以下数字?
..
我想问一下会不会是死循环导致的异常:“ExeptionStack_Overflow”,特别是下面的代码中出现了这个异常: ( *the loop "while" should stop when both stacks are empty*) while (not (Stack.is_empty stackFalse) )|| ( not (Stack.is_empty st
..
我是第一次学习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
..
我试图说服自己,List Monad(具有平面列表、列表连接和映射元素的Monad)不是自由Monad(准确地说,是与某个函数器T关联的自由Monad)。据我所知,我应该能够在 年实现这一目标。 首先在单体列表中查找常用运算符FMAP、Join等之间的关系 然后证明了这种关系不存在于函子T上的任何自由单子中,对于所有T 列表单子中的特殊关系是什么,使其有别于自由单子?如果我不知
..
为什么Ocaml有可变数组?据我所知,函数式编程是为了将副作用降到最低。可变(edit:)数组是否与此想法相反? 即使字符串在Ocaml中也是可变的,这在Python中甚至不是这样的,或者OCaml不被视为纯函数式语言吗? 推荐答案 OCaml不是纯函数式语言,TRUE。它有一个纯功能子集,但支持突变和许多命令性构造(以及可变的OO对象)。我的重点是允许程序员在为函数式编程提供极
..
假设我希望在模块中具有多态函数。 module type NewHType1 = sig type ('a, 'n) t type t' type ('n, 't) inj = { inj : 'a. ('a, 'n) t -> ('a, ('n, t') happ) app type ('n, 't) prj = { prj : 'a. ('a, ('n
..
我正在尝试使用OCaml为C语言变体编写词法分析器。对于词法分析器,我需要匹配字符串“^”和“||”(分别作为指数和/或符号)。这两个字符都是regex中的特殊字符,当我尝试使用反斜杠对它们进行转义时,没有任何变化,代码运行起来就好像“^”仍然是行的开头,“||”仍然是“or或”。我可以做些什么来修复此问题? 推荐答案 字符串中的反斜杠字符必须加倍才能通过OCaml字符串解析器:
..
是否可以在Windows上使用OCaml对控制台输出进行着色? 在Linux终端上似乎可以:print_string " 27[31m blabla"但我找不到任何有关Windows控制台的信息。 推荐答案 使用Vanilla窗口工具.. 默认情况下,无法使用命令(Ms Dos)控制台仿真进行颜色管理。 开箱即用,您可以获得的最佳效果是改用PowerShell命令行界
..
我是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) |
..
我刚读了this thread,觉得很有趣。 我将在几分钟内实现remove from the left函数: (* * remove duplicate from left: * 1 2 1 3 2 4 5 -> 1 2 3 4 5 * *) let rem_from_left lst = let rec is_member n mlst = match mlst
..
我有大约30.000行缩进严重的OCaml代码(包括mly和mll文件),我想缩进它们。我试着在谷歌上搜索“ocaml缩进”的变体,我能得到的最接近的结果是使用Omlet.vim,一次缩进一行代码(在插入模式下通过C-f)。有没有办法缩进所有的30000行? 推荐答案 我使用Emacs作为编辑器,安装了此软件包: http://caml.inria.fr/pub/docs/u3-
..
我正在练习尾递归,并且我想这样做,给定类型 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
..
我看到一些源代码有 let rec parse_document = parser | [] -> parse_list [] (ES.take_int32 len st) | [] -> malformed "parse_document" 我可以知道[]里面是什么吗?在谷歌上搜索这类标志太难了
..
如何使用OCaml或SML表示来自Haskell的以下数据类型? newtype Fix f = In (f (Fix f)) 推荐答案 我已经answered this question on the mailing-list了(我必须说,您在两个不同的地方问这个问题没有几天的好时间,我有点不高兴,因为这可能会引起重复的努力),但是让我们在这里重复一下。 这里有一个困难,因为O
..
如果我有一个自定义数据类型“Triple”,如下所示,我将如何创建可以使用的它的实例? type triple = int * int * int 谢谢! 推荐答案 这里有一个实例: let my_instance = (1, 2, 3) 不管怎么说,您的类型不是新类型,它只是以前存在的类型的一个方便的缩写,它是一个由3个整数组成的元组。没有构造函数的类型声明只是
..
我使用的是Mac OS Big Sur(11.5.6)。我已安装以下版本的ocaml(通过Opam). $ ocaml --version The OCaml toplevel, version 4.08.1 但是,当我通过自制软件构建unison时,它似乎使用了不同版本的ocaml. $ brew install unison Warning: Treating unison a
..
我正在尝试通过MacOS上的OCamlopam包管理器安装OCaml。我已通过自制软件成功安装opam。使用opam init启动包管理器会产生以下错误: [ERROR] Could not update repository "default": OpamDownload.Download_fail(_, "Curl failed: "/usr/bin/curl
..
有没有一种方法可以使可选参数f足够灵活,使其具有类型'a -> 'b,同时仍将其默认为identity,因为identity具有类型'a -> 'a? An earlier question以准确地说明我的问题开始: 我想定义一个接受可选参数的函数,该参数是 函数(‘a->’b)。默认值应为标识,该标识 实际上是(‘a->’a),但我看不出为什么不应该是 与更通用的(‘a->’b)兼容
..
我试图传入一个字符串以获得反转的字符串。为什么我不能这样做: let rec reverse x = match x with | "" -> "" | e ^ s -> (reverse s) ^ e;; 编译器说这是一个语法错误。我不能使用^来分解参数吗? 推荐答案 原因是字符串没有以与列表相同的方式表示为数据类型。因此,虽然cons(::)是一个构造函数,
..