问题标签 [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.
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”的东西,但我看过,它对我来说似乎很先进。
任何帮助表示赞赏!
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 也自动完成它)。
有一点我不明白。有什么帮助吗?
ocaml - Base 弃用了一些有用的函数
我习惯使用print_int
OCaml 中的标准函数,但是当我打开Base
Jane Street 的库时,按照 Real World OCaml 中的建议,我收到了弃用警告:
更糟糕的是,当我按照那本书的建议使用 构建它时dune
,警告变成了错误。我该怎么办 ?替换print_int
为printf "%i"
? 或与Caml.print_int
?两者似乎都有效,但看起来不必要的复杂。还有什么?谢谢你。
ocaml - 使用 OCaml 查找多路(通用树)的高度
作为函数式编程 (OCaml) 的新手,我一直遇到这个问题。
我想出了如下所示的代码:
但是 OCaml 的顶层(utop)给出了警告:
当我跑步时
utop 抛出关于匹配失败的异常。
我也实现了这个:
它返回
另外,我还尝试了另一种方式:
那么错误是:
那么,我该如何克服这个问题呢?
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 中的样子:
ocaml - 如何在 utop 中使用 ppx 派生?
如何在我的 utop 中使用 ppx 派生( https://github.com/ocaml-ppx/ppx_deriving )?
例如,我必须遵循以下代码:
ocaml - 在 OCaml 中搜索表达式的类型
:t +
在 Haskell 中,我们可以通过在终端输入来搜索表达式的类型,例如“+” 。
在 utop 中,我们如何确定诸如“+”之类的表达式的类型?我试过输入+ ;;
utop,这会产生Error: Syntax error
.
ocaml - 如何在 utop 中生成多行代码?
在 Haskell 中,我们可以在终端输入多行代码,将其括在“:{”和“:}”之间。例如,键入
> :{ main = do
> print("Hello") :}
在 ghci 中,我们可以调用main
. 我们如何在 utop 上的 Ocaml 中做到这一点?
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 函数。