F# 更改为 OCaml [关闭]

2023-12-29

F# 源自 OCaml,但是缺少或添加了哪些主要项目?具体来说,我很好奇可用于学习 OCaml 的资源对于想要学习 F# 的人是否也有用。


这个问题已经得到解答有一段时间了,但令我感到非常惊讶的是,大多数答案都说 F# 中缺少哪些 OCaml 功能 - 如果您想将现有的 OCaml 程序移植到 F#(这可能是大多数参考文章的动机)。然而,有许多功能使 F# 成为一种不同的语言(不仅仅是用于 .NET 的 OCaml 的有限版本!)以下是 F# 中添加的一些内容:

  • 计量单位允许您对处理数值计算的代码进行类型检查
  • 元编程使用引号(这使得在 F# 中使用 LINQ 成为可能,并且对于 WebSharper 平台等有前景的项目也至关重要)
  • 活跃模式用于创建函数数据类型的抽象(对于更复杂的模式匹配应用程序通常非常有用的功能)
  • 计算表达式这是背后的语言特性异步工作流程(异步 I/O/Web 服务/GUI 编程的库)
  • .NET 兼容对象系统这使得与 .NET 平台完全互操作成为可能(OCaml 也支持对象,但有所不同 - 当然这两个系统都有一些好处)。
  • 重载运算符- 据我所知,OCaml 没有重载运算符 - 在 F# 中你可以使用+对于所有数字类型以及支持它的类型。

老实说,我认为 Visual Studio IDE 也值得一提。这不是语言的一部分,但它确实改善了用户体验(Visual Studio 中的 IntelliSense 支持真的很好!)

如果您查看该列表,就会发现有很多因素在很大程度上促进了 F# 的流行,因此它不仅仅是“没有函子的 OCaml”。 F# 绝对基于 OCaml(并借鉴了 Haskell 等其他语言的思想),并与它们共享许多方面,但也有很多其他的东西。我猜想,如果没有异步工作流程、.NET 风格的 OO 和元编程之类的东西,Microsoft 开发人员部门永远不会在 Visual Studio 2010 中包含 F#。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

F# 更改为 OCaml [关闭] 的相关文章

  • 像 Javascript 对象一样循环遍历 F# 记录

    在 javascript 中 我可以使用简单的 for 循环访问对象的每个属性 如下所示 var myObj x 1 y 2 var i sum 0 for i in myObj sum sum myObj i 我想知道我是否可以用 F 做
  • F# 静态成员类型约束

    我正在尝试定义一个函数 factorize 它使用类似于 Seq sum 的结构类型约束 需要静态成员 Zero One 和 以便它可以与 int long bigint 等一起使用 似乎无法获得正确的语法 并且无法找到有关该主题的大量资源
  • true 和布尔列表 f# 的长度

    直接使用递归 写一个函数truesAndLength bool list gt int int那 返回列表的长度 在该对的第一个组件中 以及列表的数量 列表中正确的元素 在第二个组件中 你的函数必须只迭代 遍历列表的元素一次 请勿使用 Li
  • 了解 F# 尾递归

    最近在学习F 我尝试以不同的方式解决问题 像这样 0 1 2 3 4 5 6 7 8 gt 0 1 2 3 4 5 6 7 8 head recursive let rec toTriplet v1 list match list with
  • 如何从 C# 可移植类库 (PCL) 添加对 F# 可移植库的引用

    我有一个项目 其中包含两个 F 项目和一个 C 项目 我想在其中编写一些 XUnit 测试 FS PL F 3 1 3 3 1 0 可移植库 FS PL Legacy F 31 2 3 5 1 可移植库 旧版 测试 C NET 4 5 Wi
  • obj[] 和 string[] 作为参数

    我在用Microsoft FSharp Reflection FSharpValue MakeUnion这需要一个Reflection UnionCaseInfo and an obj 可以为空 作为参数 但是 我得到了Type misma
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • 为什么计算斐波那契数需要很长时间?

    几天前我开始学习Ocaml 我尝试编写一个斐波那契数字程序 let rec fib a if a 1 a 2 then 1 else fib a 1 fib a 2 该代码不是最佳的 因为我不知道如何处理异常情况 但现在 如果我尝试计算 f
  • 如何让一条记录实现一个接口?

    如果我有一个界面 type IData abstract member firstName string abstract member lastName string 如何定义符合此接口的记录类型 我尝试了如下所示 gt type Dat
  • 如何使用 WebSharper 在服务器上生成 Google Visualizations 数据

    我的目标是能够在服务器上为 Google Visualizations 生成数据 然后将其作为 java 脚本传递给客户端 以便可以将其呈现为折线图 我下面的示例可以正确编译 但在浏览器中呈现时会产生错误 在服务器上构建 DataCommo
  • Async.AwaitTask 在 f# 中如何工作?

    我知道 f 和 c 异步模型之间的主要区别在于 在 f 中 除非您调用 Async RunSynchronously 之类的内容 否则异步执行不会开始 在 C 中 当方法返回任务时 通常 并非总是 立即在后台线程中开始执行 Async Aw
  • 如何在.NET Core上直接调用F#编译器?

    UPD 我想直接从 NET Core SDK 调用 F 编译器 即 fsc 我了解 dotnet build co 但当我只需要编译一个简单的问题时 即 fsc file fs 就足够的情况下 我不想涉及它们 我尝试在 NET Core S
  • 何时使用函子而不是 lambda

    是否存在创建函子比使用 lambda 更有意义的情况 我知道我的问题实际上是相反的何时在函子上使用 lambda https stackoverflow com questions 4686507 lambda expression vs
  • kind 类型的函子和应用词 (* -> *) -> *

    我遇到了一种情况 我的代码将受益于使用Functor and Applicative 类似抽象 但针对种类类型 gt gt 定义一个更高种类的函子可以通过RankNTypes像这样 class HFunctor f where hfmap
  • 为什么我必须将 Async 包装到另一个异步工作流程中并让!它?

    我试图了解 F 中的异步工作流程 但我发现有一部分我真的不明白 下面的代码工作正常 let asynWorkflow async let result Stream TryOpenAsync partition gt Async Await
  • ocaml 中的 {X with value}

    我看到下面的函数调用雅菲示例 http aryx kicks ass org pad software project yacfe simple zero to null ml html Visitor c vk program Visit
  • F#:模式构成?

    我正在尝试编写一个由另外两个模式组成的模式 但我不确定如何去做 我的输入是字符串列表 文档 我有一个与文档标题匹配的模式和一个与文档正文匹配的模式 该模式应该匹配整个文档并返回标题和正文模式的结果 您可以使用以下命令一起运行两个模式 您在问
  • 如何在 F# 中组合 Result<> 列表?

    用这个代码 let a 3 4 5 6 7 let check x if x 2 0 then Ok x else Error x let b a gt List map check 我如何将 B 总结为 如果一切OK 则Ok 如果有任何错
  • int -> int list 与类型 int -> IEnumerable<'a> 不兼容

    Given open System Linq 这是一个可以接受的表达方式 2 3 4 SelectMany fun n gt 1 n 但这不是 2 3 4 SelectMany fun n gt 1 n 错误消息显示 int gt int
  • 使用异步工作流程并行化的最佳实践

    假设我想抓取一个网页并提取一些数据 我很可能会写这样的东西 let getAllHyperlinks url string async let req WebRequest Create url let rsp req GetRespons

随机推荐

  • 将响应发送给除发件人之外的所有客户端

    要将某些内容发送给所有客户 您可以使用 io sockets emit response data 要接收来自客户的信息 您可以使用 socket on cursor function data 如何将两者结合起来 以便在服务器上从客户端接
  • enctype“application/json”形式可用吗?

    我正在读这个w3c 文档 https www w3 org TR html json forms 关于用 html 表单发布 JSON 数据 并尝试测试它 我的测试表格如下
  • gcc -O0 在 2 的幂矩阵大小(矩阵转置)上优于 -O3

    出于测试目的 我编写了一个简单的方法来计算 nxn 矩阵的转置 void transpose const size t n double A for uint i 0 i lt n i for uint j i 1 j lt n j dou
  • JPEG 伪影检测

    是否有已知的算法可以在不查看图像的情况下以编程方式检测图像退化 我考虑有损重新编码的明显 可见 图像伪影 例如颜色 失真 边缘噪声 块效应等 例如 从原始源编码且 JPEG 质量为 80 的图像就可以 我希望这是正确的提问地点 但如果版主认
  • Lua - 删除非空目录

    我正在尝试删除中的非空目录Lua但没有成功 我尝试了以下方法 os remove path to dir 并得到错误 Directory not empty 39当文件数为39时path to dir 还尝试过 require lfs lf
  • 如何为时间序列中缺失的数据创建“NA”

    我有几个数据文件 如下所示 X code year month day pp 1 4515 1953 6 1 0 2 4515 1953 6 2 0 3 4515 1953 6 3 0 4 4515 1953 6 4 0 5 4515 19
  • 行内元素内的绝对定位。这种行为正确吗?

    考虑以下简单的 HTML 和 CSS a rel position relative button position absolute top 0 left 0 Lorem ipsum dolor sit amet a class rel
  • 如何忽略 Git 上的 IDE 设置?

    我有以下 Git 信息 我想忽略 IDE Eclipse 的设置 modified myproject classpath modified myproject project modified myproject settings com
  • python中是否存在空类?

    python中是否存在特殊的类来创建空对象 我尝试了 object 但它不允许我添加字段 我想这样使用它 obj EmptyObject obj foo far obj bar boo 我应该每次 在几个独立的脚本中 定义这样的新类吗 cl
  • 比较 2 个 Excel 文件并仅输出差异(Powershell)

    我正在尝试比较 2 个 XLXS 并且只想输出差异 这可以用 Compare Object 来完成吗 我目前正在使用这个有效的脚本 但它没有捕获我真正需要的内容 IMPORT PS EXCEL MODULE import module ps
  • 矮人错误:找不到 DIE

    我在调试 XCode 4 中的 C 项目中的分段错误时遇到了很多麻烦 当我使用 LLVM 2 0 编译器选项构建并使用 O3 优化时 我只会出现段错误 据我了解 当使用优化时 调试选项是有限的 但这是我在打开 gdb 的 Xcode 中运行
  • 如何从 Applet 中模拟模式对话框?

    在 setVisible true 上 我调用以下代码来启动模式对话框 private synchronized void startModal try if SwingUtilities isEventDispatchThread Eve
  • 为什么在ConfigureAwait(false)之后保留区域性

    我有以下异步代码 Main system culture is English here Thread CurrentThread CurrentCulture CultureInfo GetCultureInfo es WriteLine
  • Visual Studio 2017 与 boost 1.64.0/1.63.0 的兼容性问题

    我有一个使用 boost 1 64 0 的项目 因为我需要 boost 过程 它的 CMakeList 已处理 代码使用 Qt Clion 进行编译 但是当我在 Visual Studio 2017 中使用相同的代码时 出现以下错误 下面是
  • 在 Mac 上哪里添加 Graphviz 的可执行文件

    我正在尝试使用Graphviz但收到错误消息 graphviz backend ExecutableNotFound failed to execute dot Tpdf O test output aoc gv pdf make sure
  • AWS Firehose 换行符

    我读过很多关于向 firehose 添加换行符的类似问题 但它们都是围绕将换行符添加到源中的 问题是我无权访问源 第三方正在将数据传输到我们的 Kinesis 实例 我无法添加 n到源头 我尝试使用以下代码进行 Firehose 数据转换
  • “if”语句的 test -s

    我有一个问题 如果有人知道的话我将不胜感激 好吧 说到重点了 在我的一个脚本中 我有以下表达式 我不清楚手册页应该产生什么效果 if s the file to check then echo file is zero sized and
  • 使用C#将HTML内容写入word文档

    我正在动态生成一个 Word 文档 需要使用使用 CKeditor 控件生成的 html 内容替换我的特殊标签 这里我使用的Word文档是一个模板 其中包含预先输入的文本 并且为了生成文档 我使用Microsoft Office Inter
  • 根据私有指数 (d)、公共指数 (e) 和模数 (n) 计算素数 p 和 q

    如何根据 e 公钥 d 私钥 和模数计算 p 和 q 参数 我手头有 BigInteger 键 我可以将其复制粘贴到代码中 一个公钥 一个私钥和一个模数 我需要由此计算 RSA 参数 p 和 q 但我怀疑有一个我无法通过谷歌找到的库 有任何
  • F# 更改为 OCaml [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 F 源自 OCaml 但是缺少或添加了哪些主要项目 具体来说 我很好奇可用于学习 OCaml 的资源对