ocamlbuild Toploop/TopLevel
ocamlbuild with Toploop/TopLevel
我正在寻找实现一个 eval 函数,就像这里的这个答案一样:
但是,当我去编译我的代码示例时:
let eval code =
let as_buf = Lexing.from_string code in
let parsed = !Toploop.parse_toplevel_phrase as_buf in
ignore (Toploop.execute_phrase true Format.std_formatter parsed)
let rec sum_until n =
if n = 0
then 0
else n + sum_until (n - 1);;
let a = print_string "Enter sum_until x where x = an int: "; read_line ();;
print_int eval a;;
具有以下内容:
ocamlbuild UserInputEval.native -pkgs compiler-libs,compiler-libs.toplevel
我收到错误:
File "_none_", line 1: Error: Cannot find file
/usr/lib/ocaml/compiler-libs/ocamltoplevel.cmxa Command exited with
code 2.
我检查了 compiler-libs 目录,我没有 ocamltoplevel.cmxa 文件,但我有一个 ocamltoplevel.cma 文件。
我想知道这是否是一个简单的修复?我对 ocaml 有点陌生,所以我不确定如何解决这个问题。谢谢!
顶级库仅在字节码模式下可用:
ocamlbuild UserInputEval.byte -pkgs compiler-libs,compiler-libs.toplevel
另请注意,compiler-libs 包可能需要单独安装(至少对于 archlinux 是这样)。
然而,您的代码可能没有达到您的预期:您只是将用户输入提供给顶层解释器,而没有从顶层状态读取任何内容。
如果你只想读取一个整数,你可以简单地完成:
let a = print_string "Enter sum_until x where x = an int: \n"; read_int ();;
print_int (sum_until a);;
不需要编译器库。
我正在寻找实现一个 eval 函数,就像这里的这个答案一样:
但是,当我去编译我的代码示例时:
let eval code =
let as_buf = Lexing.from_string code in
let parsed = !Toploop.parse_toplevel_phrase as_buf in
ignore (Toploop.execute_phrase true Format.std_formatter parsed)
let rec sum_until n =
if n = 0
then 0
else n + sum_until (n - 1);;
let a = print_string "Enter sum_until x where x = an int: "; read_line ();;
print_int eval a;;
具有以下内容:
ocamlbuild UserInputEval.native -pkgs compiler-libs,compiler-libs.toplevel
我收到错误:
File "_none_", line 1: Error: Cannot find file
/usr/lib/ocaml/compiler-libs/ocamltoplevel.cmxa Command exited with
code 2.
我检查了 compiler-libs 目录,我没有 ocamltoplevel.cmxa 文件,但我有一个 ocamltoplevel.cma 文件。
我想知道这是否是一个简单的修复?我对 ocaml 有点陌生,所以我不确定如何解决这个问题。谢谢!
顶级库仅在字节码模式下可用:
ocamlbuild UserInputEval.byte -pkgs compiler-libs,compiler-libs.toplevel
另请注意,compiler-libs 包可能需要单独安装(至少对于 archlinux 是这样)。
然而,您的代码可能没有达到您的预期:您只是将用户输入提供给顶层解释器,而没有从顶层状态读取任何内容。
如果你只想读取一个整数,你可以简单地完成:
let a = print_string "Enter sum_until x where x = an int: \n"; read_int ();;
print_int (sum_until a);;
不需要编译器库。