问题标签 [utop]

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 投票
1 回答
196 浏览

visual-studio-code - 使用 VScode 和终端进行 OCaml 交互开发的适当做法

我想知道哪一种是在 Ocaml(在 MAC 中)中编程的一种舒适方式。

我目前正在使用 VSCode 来检测语法和类型错误,但随后我使用在线解释器进行编译(它创建 ml)并在其上运行示例;我的意思是,实例化变量、测试示例等。例如,我使用在线:https ://try.ocamlpro.com/ 。

我知道这不是最好的方法:例如,如果一个包没有集成(让我们说num),我不能opam install num打开它。

所以我想知道哪个是同时拥有 (1) 像 VSCode 这样的酷界面和 (2) 即时编译 + 测试东西的合适选择。

我想我很接近下一个选项:我ocaml在终端中写入,然后打开一个模式:

...

在那里,我可以写:#open Num;; #open List;; #let...但我不知道如何在上面加载文件。

有人还告诉我有一种叫做“utop”的东西,但我看过,它对我来说似乎很先进。

任何帮助表示赞赏!

0 投票
1 回答
153 浏览

ocaml - Ocaml utop 不(但确实)识别 Big_int

我有一些使用模块的代码Big_int,例如:

但是,当我用 utop 编译它时dune utop --release(我用它release来避免一些警告),然后我得到这个错误:

Error: Required module `Big_int' is unavailable

我已经阅读了它并且我已经阅读(https://groups.google.com/g/felix-language/c/1CfHgpe9zps?pli=1)'Big_int不再是 OCaml 发行版的一部分。它被 Zarith 取代。好吧,我知道,而且我仍然可以使用Big_int.

我怎么知道?关键是,如果我从utop没有错误的任何其他文件开始,并且一旦进入我 open Big_int,那么它不会后悔:

utop # open Big_int;;

在那里,它会自动完成 my Big_int.,就像在Big_int.add_big_int. 所以在Big_int某个地方并且它被识别(VSCode 也自动完成它)。

有一点我不明白。有什么帮助吗?

0 投票
1 回答
99 浏览

ocaml - Base 弃用了一些有用的函数

我习惯使用print_intOCaml 中的标准函数,但是当我打开BaseJane Street 的库时,按照 Real World OCaml 中的建议,我收到了弃用警告:

更糟糕的是,当我按照那本书的建议使用 构建它时dune,警告变成了错误。我该怎么办 ?替换print_intprintf "%i"? 或与Caml.print_int?两者似乎都有效,但看起来不必要的复杂。还有什么?谢谢你。

0 投票
1 回答
286 浏览

ocaml - 使用 OCaml 查找多路(通用树)的高度

作为函数式编程 (OCaml) 的新手,我一直遇到这个问题。

我想出了如下所示的代码:

但是 OCaml 的顶层(utop)给出了警告:

当我跑步时

utop 抛出关于匹配失败的异常。

我也实现了这个:

它返回

另外,我还尝试了另一种方式:

那么错误是:

那么,我该如何克服这个问题呢?

0 投票
0 回答
64 浏览

ocaml - 错误:解释器扩展中的未绑定值能够处理 OCaml 中的二叉树操作

我正在尝试为 OCaml 中的解释器实现二叉树操作的扩展。扩展基本上是为了

  • {emptytree -> e2, node(id1,id2,id3) -> e3} 的 caseT e1。

为了实现扩展(emptytree、caseT、node),必须相应地扩展表示值的集合。现在变为:ExpVal = Int + Bool + ExpVal 列表 + ExpVal 树

OCaml中表示值的对应实现是:

为此,这里是解释器的存根:

emptytree、node 和 caseT 的示例测试用例如下:

该扩展的抽象语法节点如下:

我定义了表达值“TreeVal”并使用以下方法提取 TreeVal 的值:

此外,我已经有了一些辅助函数,如下所示:

但是,当我运行顶层时,它会生成一个有趣的错误:

这对我来说似乎很有趣,因为该功能已经定义。在这一点上,我无法弄清楚如何处理和解决问题。有人能指出如何正确实现这个扩展吗?

Ps1 除了这里的那些东西,我还在这个interpreter.ml 的顶部加载了数据结构(ds.ml)和抽象语法树(ast.ml)文件。

Ps2 这是 ds.ml 中的样子:

0 投票
1 回答
67 浏览

ocaml - 如何在 utop 中使用 ppx 派生?

如何在我的 utop 中使用 ppx 派生( https://github.com/ocaml-ppx/ppx_deriving )?

例如,我必须遵循以下代码:

0 投票
0 回答
47 浏览

ocaml - 在 OCaml 中搜索表达式的类型

:t +在 Haskell 中,我们可以通过在终端输入来搜索表达式的类型,例如“+” 。

在 utop 中,我们如何确定诸如“+”之类的表达式的类型?我试过输入+ ;; utop,这会产生Error: Syntax error.

0 投票
1 回答
51 浏览

ocaml - 如何在 utop 中生成多行代码?

在 Haskell 中,我们可以在终端输入多行代码,将其括在“:{”和“:}”之间。例如,键入

> :{ main = do
> print("Hello") :}

在 ghci 中,我们可以调用main. 我们如何在 utop 上的 Ocaml 中做到这一点?

0 投票
1 回答
46 浏览

ocaml - 为什么这里不调用标记 stag 函数?

我试图了解 OCamlFormat模块和语义标签的以下行为。

我的代码:

如果我将其粘贴到:utop 版本 2.8.0(使用 OCaml 版本 4.12.0)

当我运行它时:

为什么mark_open_stag不调用和关闭函数?

如果我将第 5 行更改为Format.pp_set_print_tags ppf true;然后我看到print_open_stag调用了 and close 函数。