ocaml相关内容

使 OCaml 函数对 int 列表和 float 列表具有多态性

有没有办法在 OCaml 中创建一个对整数和浮点数同样适用的多态添加函数?例如,如果我有这样的功能: 部分和 [1;2;3;4;5] 我应该得到 [1;3;6;10个;15] 但此功能不适用于 [1.;2.;3.;4.;5.] 因为在 OCaml 中整数和浮点数绝对不能混用.但是,如果我希望我的函数同样适用于 int 列表和 float 列表怎么办?是否有一个通用类型,其中 int 和 fl ..
发布时间:2022-01-24 16:22:45 其他开发

寻找 OCaml IDE

我喜欢 F#,但有时我需要一些轻量级和跨平台的东西,而且肯定不需要 .NET.我多次尝试使用 OCamL,但似乎无法启动它. 安装了 IDEA,添加了 OCamL 插件 -> 不起作用 已安装 eclipse ODT 插件 -> 甚至无法启动配置 OCamL 编译器 - 太复杂了 很久以前就尝试过 NetBeans 插件,但还是无法处理. 所以,现在,我在命令 shell 和不同的 ..
发布时间:2022-01-20 21:47:27 其他开发

N元组与对

在 Ocaml 中,不同元组的元组具有不同的类型和值构造函数: # let a = (1, 2, 3);;val a : int * int * int = (1, 2, 3)# 让 b = (1, (2, 3));;val b : int * (int * int) = (1, (2, 3)) 请注意,第二个示例 (b) 比第一个示例 (a) 更灵活,因为 b - (2, 3) 的“尾部" ..
发布时间:2022-01-20 08:25:01 其他开发

OCaml 内部结构:异常

我很想知道 OCaml 运行时如何处理异常以使它们变得如此轻量级.他们是使用 setjmp/longjmp 还是在每个函数中返回一个特殊值并传播它? 在我看来 longjmp 会给系统带来一点压力,但只有在引发异常时,同时检查每个函数返回值需要在调用函数后检查每个值,这似乎我会进行很多检查和跳转,似乎它会表现最差. 通过查看 OCaml 如何与 C 交互(http://caml.inr ..
发布时间:2022-01-17 08:46:17 其他开发

F# 中的加法类型 (+)

我刚刚了解到 OCAML 必须有一个 . 后缀来进行浮点运算.一个例子是 3.+.4. 等于 7.(浮点数).但是,F# 以相同的方式处理浮点数和整数运算,因此 3 + 4 (int) 和 3.+ 4.(浮动)有效. F# 有 + 自然分配给 int 所以 let add a b = a + b 是 int ->内部 ->整数.事实上 (+) 给了我 val it : (int -> int ..
发布时间:2022-01-05 10:19:00 其他开发

如果 SML.NET 有函子,为什么 F# 不能?

这个问题开始于 我翻译的“ML for the Working Programmer"(WorldCat) 由 LC PAULSON 到 F# 使用函子作为示例. 最终希望翻译“纯函数数据结构"(WorldCat)作者 Chris Okasaki,使用函子. 阅读“类别类型和结构 - 类别理论简介供计算机科学家使用"(WorldCat),作者:Andrea Asperti 和 Giuse ..
发布时间:2022-01-05 10:10:47 其他开发

如果我已经知道 OCaml,我应该学习 Haskell 还是 F#?

我想知道我是否应该继续学习 OCaml 或切换到 F# 或 Haskell. 以下是我最感兴趣的标准: 长寿 哪种语言会持续更长时间?我不想学习可能在几年内被用户和开发人员放弃的东西. 从长远来看,Inria、微软和格拉斯哥大学是否会继续支持各自的编译器? 实用性 类似this 让我害怕使用 Haskell.哈希表是快速检索的最佳结构.那里的 Haskell 支持者 ..
发布时间:2022-01-05 10:09:39 其他开发

什么是“让"?F# 和 OCaml 等函数式语言中的关键字?

在查看 F#、Ocaml 和其他函数式语言代码示例时,我注意到 let 关键字的使用频率很高. 为什么需要它?为什么设计语言有它? 你为什么不能把它去掉?例如:让 x=4 变成 x=4 解决方案 在 F#(和 OCaml)中 let 是非常强大的结构,用于值绑定,它意味着赋予符号某种意义.这可能意味着各种事情: 声明本地或全局值 - 您可以使用它来声明本地值.这类似于在命令式 ..
发布时间:2022-01-05 10:04:51 其他开发

解释模式匹配与开关

我一直试图向几个人解释 switch 语句和模式匹配 (F#) 之间的区别,但我真的无法很好地解释它......大多数时候他们只是看着我说“那你为什么不直接使用 if..then..else". 你会如何向他们解释? 编辑!感谢大家的精彩答案,我真的希望我可以标记多个正确的答案. 解决方案 我以前是“那些人"中的一员,我不知道有没有一种简洁的方式来总结为什么模式匹配是如此美味. ..
发布时间:2022-01-05 09:49:20 其他开发

OCaml 异常的表现

我经常读到异常有点慢,如果性能有问题,应该避免异常(例如,在 Java、F# 等中).这是否适用于常见的 OCaml 函数,例如 Hashtbl.find,它会为未找到的元素返回异常? 特别是,如果我希望我的应用程序高效,我是否应该在调用 Hashtbl.find 之前始终使用例如 Hashtable.mem 来测试元素成员资格?或者 mem 函数的额外比较是否会对性能产生负面影响? ..
发布时间:2022-01-05 09:47:40 其他开发

F# 对 OCaml 的更改

F# 是从 OCaml 派生出来的,但是缺少或添加了哪些主要项目?具体来说,我很好奇可用于学习 OCaml 的资源是否对想要学习 F# 的人也有用. 解决方案 主要区别在于 F# 不支持: 函子 OCaml 风格的对象 多态变体 camlp4/5 预处理器或扩展点 (ppx) 此外,F# 对标记参数和可选参数有不同的语法. 理论上,不使用这些特性的 OCaml 程序 ..
发布时间:2022-01-05 09:34:15 其他开发

在 F#/OCaml 中实现类似快速排序的函数的尾递归版本

是否可以实现快速排序算法的尾递归版本(通过延续模式)?如果是,人们将如何实施它? 普通(未优化)版本: let rec quicksort list =匹配列表|[] ->[]|元素::[] ->[元素]|枢轴::休息->让``小于pivot的元素``,``大于或等于pivot的元素``=休息|>List.partition(fun element -> element 解决方案 直 ..
发布时间:2022-01-02 13:48:51 其他开发

将项目列表拆分为奇数和偶数索引项目的两个列表

我想做一个接受列表并返回两个列表的函数:第一个包含每个奇数项,第二个包含每个偶数项. 例如,给定 [1;2;4;6;7;9],我想返回 [ [1;4;7] ;[2;6;9] ]. 我写到这里为止,我不知道如何进行. 让 splitList 列表 =让 rec splitOdd oList list1 list2 =匹配 oList|[] ->[]|头::尾->splitEven ta ..
发布时间:2022-01-02 13:38:25 其他开发

在 Ocaml 中查找树深度的尾递归函数

我有一个类型 tree 定义如下 type 'a tree = 'a 的叶子 |'a * 'a tree * 'a tree的节点;; 我有一个函数来查找树的深度,如下所示 let rec depth = function|叶 x ->0|节点(_,左,右)->1 +(最大(左侧深度)(右侧深度));; 这个函数不是尾递归的.有没有办法以尾递归的方式编写这个函数? 解决方案 您可以 ..
发布时间:2022-01-02 13:28:34 其他开发

OCaml 中的一元减号和浮点数

我想在我的程序中有一个复数向量,所以我写了这个: [|pt 0. 0.;点-4.1.;点-7.-2.;第 4. 5. 点;第 1. 1.|] 这里pt是一个float类型的函数 ->浮动 ->复杂.t.但是ocaml 拒绝编译这个说法: 字符 12-14:[|pt 0. 0.;点-4.1.;点-7.-2.;第 4. 5. 点;pt 1. 1.|];;^^错误:此表达式的类型为 float - ..
发布时间:2021-12-29 19:28:34 其他开发