【问题标题】:Ocaml #load without top level?Ocaml #load 没有顶级?
【发布时间】:2023-03-29 22:30:02
【问题描述】:

我对 ocaml 有疑问,我是 ocaml 的初学者。 我想使用 #load "....ml" 。 然后打开“....ml”。

当我使用 emacs 时没问题,但我目前使用带有 ocaml 编译器的 linux xfce,当我尝试使用 #load 并打开时,出现语法错误。

我已经在网上看了,如果我不需要在加载前使用“#”但我也有语法错误。

使用 Emacs 的代码示例:

#load "list_ap1.cmo"
open List_ap1;;

liste_ap1.cmo 中有什么

module List_ap1 =
  struct
    let len(l) = List.length l;;

let fst(l) =
  match l with
    [] -> failwith "error empty list"
  | hd::tail -> hd
;;

谁能帮帮我? 祝你有美好的一天

【问题讨论】:

  • 您能否通过一些示例更好地描述您的用例?
  • 也许在您的问题中添加一小部分实际代码?足以证明它在 Emacs 中有效,但在您的其他环境中无效。

标签: ocaml


【解决方案1】:

正如toplevel 中提到的,#load 用于加载字节码文件,这意味着您已经使用ocamlc 将 ocaml 源编译为字节码,在这种情况下,您将加载扩展名为 @ 的文件987654325@ 或.cma。前导的# 表示它是针对顶级环境的命令,而不是ocaml 关键字。

open 是用于打开 ocaml 模块(参见 modules)的关键字,用于构建 ocaml 代码。

要启动 ocaml 顶级环境,而不是编译器,只需启动:ocaml,您就可以调用 #load。 加载 List_ap1 后,您可以通过编写完整路径来使用其功能:List_ap1.len。或者如果你open这个模块,你直接命名函数,不用模块名作为前缀。

【讨论】:

  • 感谢您的回答。还有 # 的替代品吗?为此使用
  • 事实上,不清楚的是你打算做什么,我没有抓住你的用例。您是否正在寻找在 ocaml 代码中解释 ocaml 源文件?这是不可能的。
  • 确实是关于 Ocaml 列表的学校课程。通常我们应该使用带有 tuareg 的 emacs,但我使用的是 xfce,并且我使用 ocamlc 编译我的代码,所以在这个练习中,老师给了我们一个 .cmo 文件,这个 .cmo 文件中有一个模块,我们需要使用它文件。
  • 好的 - 在您的课程中,您使用的是包裹在 emacs thx 中的 ocaml toplevel 到 tuareg。您可以通过运行 ocaml(不带 c)来执行相同的操作。只需启动 ocaml,您就会拥有一个带有 #load 之类的命令的顶级环境。如果你想要更好的顶层,安装 utop - 它是顶级的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 2014-12-01
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多