问题标签 [ocaml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
15256 浏览

f# - Explaining pattern matching vs switch

I have been trying to explain the difference between switch statements and pattern matching(F#) to a couple of people but I haven't really been able to explain it well..most of the time they just look at me and say "so why don't you just use if..then..else".

How would you explain it to them?

EDIT! Thanks everyone for the great answers, I really wish I could mark multiple right answers.

0 投票
3 回答
736 浏览

macros - OCaml 中的记录字段更新可以泛化吗?

我是一个非常新手的 OCaml 程序员,所以如果这是一个愚蠢/明显的问题,请原谅我。有很多东西要吸收,我可能在文档中错过了这一点。

我有一个开始看起来像这样的代码库:

重复开始困扰我,因为我想写这样的东西:

这样,当我更新 x 时,我可以简单地调用:

这调用了“宏!” 对我来说,但我不相信 OCaml 有一个宏系统。我还可以做些什么?

0 投票
1 回答
208 浏览

installation - GODI安装错误

我正在运行 Fedora 9 x86_64 并且或多或少是 Linux 新手(不使用它,但安装等)。错误发生在引导程序的第二阶段(即“./bootstrap_stage2”)。它做了很多事情,然后这些错误开始发生:

我已经运行它来监控我的记忆,并且可以说我肯定没有用完(使用大约 500 个,我有 3 个)。所以有人知道问题是什么吗?我在网上搜索过,但我发现的唯一其他类似的东西是这里的另一个线程(但它有一个不同的错误)

任何帮助将不胜感激,因为我上次安装它时,它完美无缺。

0 投票
1 回答
899 浏览

ocaml - 我的 SHA256 的 OCaml 实现是否健全?

我是一名新手 OCaml 程序员,并认为我会尝试实现一个非常棘手的算法,从而使自己陷入困境。我愿意接受所有大大小小的批评,无论是风格、安全还是性能相关。

我已经知道的一个批评是该算法要求整个消息都适合内存(而 SHA256 的参考实现可以一次处理一个块)。

我特别担心是否有任何递归函数不是尾递归的。

我已经测试了代码,它确实在 x86_64 Linux 上生成了正确的消息摘要。

提前感谢您的考虑。

编辑:

如果没有任何事情发生在你身上,请不要在这里花太多时间。我正在寻找明显破坏的行为,而不是重写。

因此,在单独的文件中定义的包函数是:

0 投票
13 回答
16589 浏览

ocaml - 与 Python 的 range 函数等效的 OCaml 习语是什么?

我想创建一个从 1 到 的整数列表n。我可以在 Python 中使用range(1, n+1),在 Haskell 中使用:take n (iterate (1+) 1)

什么是正确的 OCaml 习惯用法?

0 投票
2 回答
38464 浏览

pattern-matching - OCaml:在另一个内部匹配表达式?

我目前正在使用 OCaml 进行一个小项目;一个简单的数学表达式简化器。我应该在表达式中找到某些模式,并对其进行简化,从而减少表达式中括号的数量。到目前为止,我已经能够实现除了两个规则之外的大多数规则,为此我决定创建一个递归的、模式匹配的“过滤器”函数。我需要执行的两条规则是:

- 将 a - (b + c) 或类似形式的所有表达式转换为 a - b - c

-将a / (b * c)或类似形式的所有表达式转换为a / b / c

...我怀疑这会相当简单,一旦我设法实现了一个,我就可以轻松地实现另一个。但是,我在使用递归模式匹配函数时遇到了问题。我的类型表达是这样的:

我主要遇到的问题是匹配表达式。例如,我正在尝试这样的事情:

但是,似乎标记行上的匹配表达式被识别为先前“内部匹配”而不是“主要匹配”的一部分,因此永远不会识别所有“Quot(...)”表达式。甚至可以在像这样的其他匹配表达式中包含匹配表达式吗?结束内部匹配的正确方法是什么,以便我可以继续匹配其他可能性?

忽略逻辑,因为这几乎是我首先想到的,只是我无法尝试它,因为我必须首先处理这个“匹配”错误,尽管关于如何处理递归的任何建议或逻辑将受到欢迎。

0 投票
4 回答
2986 浏览

map - OCaml 有通用的 map()/reduce() 函数吗?

在 Python 中,map() 适用于任何遵循序列协议的数据。无论我给它一个字符串还是一个列表甚至是一个元组,它都会做正确的事情^TM。

我不能在 OCaml 中也有我的蛋糕吗?我真的别无选择,只能查看我正在使用的集合类型并找到相应的 List.map 或 Array.map 或 Buffer.map 或 String.map?其中一些甚至不存在!我的要求是不是很不寻常?我肯定错过了什么。

0 投票
2 回答
6068 浏览

parsing - 一个好的ocaml解析器?

我正在寻找一个好的 ocaml 解析库,它不是 flex/bison 的衍生物。理想情况下,我想要一个类似于秒差距的单子组合库,但我找不到任何东西。

我会使用haskell,但是为haskell 进行llvm 绑定证明比我最初想象的更烦人。

干杯,

杜安

0 投票
2 回答
1253 浏览

macos - 在 Mac OS X 上运行 ocaml 会出现总线错误

我刚刚在 Mac OS X 上安装了 Ocaml,当我运行 ocaml 程序时,我得到一个“总线错误”,没有其他线索可以知道发生了什么。任何人都可以就从这里去哪里提供建议吗?

编辑:

我通过包安装:

http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.2-ppc.dmg

(我有 iBook G4,所以 PPC 比较合适)

要运行 ocaml,我只需输入:

在终端窗口中

我也试过

并从 xterm 窗口运行。这三个都给出:

我按照自述文件的要求安装了 Xcode 和 X11。

0 投票
2 回答
1497 浏览

lua - 在 OCaml 中嵌入 Lua

能否请您提供一个代码片段来展示如何使用嵌入在 OCaml 中的 Lua?

一个简单的示例可能是“Hello, World”变体。让 OCaml 提示用户输入名称。然后将该名称传递给 Lua 函数。让 Lua 打印一个问候语并返回名称的长度。然后让 OCaml 打印一条关于名称长度的消息。

例子:

user@desktop:~$ ./hello.opt

姓名?用户

你好,用户。

你的名字有 4 个字母。

用户@桌面:~$

[编辑]

作为非 C 程序员,我是否可以在不必编写中间 C 程序来在 Lua 和 OCaml 之间传递数据的情况下实现这一点?

以下是我想尝试的理论想法。不幸的是,ocaml_hello.ml 的第 3 行需要知道如何调用 lua_hello.lua 中定义的函数才能使代码有效。

lua_hello.lua 定义 lua_hello,它打印一个参数并返回它的长度。

ocaml_hello.ml OCaml 提示输入名称,调用 Lua 函数,并打印返回值。