2014-02-12 42 views
2

我正在学习OCaml,遵循教程http://caml.inria.fr/pub/docs/oreilly-book/html/index.html。我想尝试一些使用'core'库的列表函数的例子。 我开始ocaml的顶(http://www.typerex.org/ocaml-top.html),并得到以下错误,当打开 'Core.Std':可以ocaml-top加载外部库吗?

# open Core.Std 

Characters 0-13: 
    open Core.Std;; 
    ^^^^^^^^^^^^^ 
Error: Unbound module Core 

文件〜/ .ocamlinit包含以下行(从Ocaml and Opam: unbound module Core补充):

(* Added by OPAM. *) 
let() = 
    try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") 
    with Not_found ->() 
;; 
#use "topfind" 
#camlp4o 
#thread 
#require "core" 
#require "core.top" 
#require "core.syntax" 

从命令行执行ocaml可以正常工作(它会在init中加载很多.cma文件),打开'Core.Std'也没有问题。 我可以编译模块:

$ ocamlfind ocamlc -thread -package core calc.ml 

我已经创建了自己的顶层与“核心”联系在一起的,工作太细:

$ ocamlfind ocamlmktop -o coretop -thread -package core 

但ocaml的顶无法打开“的核心.STD”。启动ocaml的顶我的顶层不开“Core.Std”

$ ocaml-top -ocaml /home/thelinuxkitten/coretop 

插入〜/ .ocamlinit的内容在ocaml的顶部的提示

(* Added by OPAM. *) 
let() = 
try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") 
with Not_found ->() 
;; 
#use "topfind";; 
#camlp4o;; 
#thread;; 
#require "core";; 
#require "core.top";; 
#require "core.syntax";; 

产生以下输出在评测面板:

 OCaml version 4.01.0 


# let() = 
    try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") 
    with Not_found ->() 


# #use "topfind" 

- : unit =() 
Findlib has been successfully loaded. Additional directives: 
    #require "package";;  to load a package 
    #list;;     to list the available packages 
    #camlp4o;;    to load camlp4 (standard syntax) 
    #camlp4r;;    to load camlp4 (revised syntax) 
    #predicates "p,q,...";; to set these predicates 
    Topfind.reset();;   to force that packages will be reloaded 
    #thread;;     to enable threads 

- : unit =() 

# #camlp4o 

    Camlp4 Parsing version 4.01.0 


# #thread 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/lib/ocaml/dynlink.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/lib/ocaml/camlp4: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/lib/ocaml/camlp4/camlp4o.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/lib/ocaml/threads: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/lib/ocaml/unix.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/lib/ocaml/threads/threads.cma: loaded 


# #require "core" 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/lib/ocaml/bigarray.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/bin_prot: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/bin_prot/bin_prot.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/variantslib: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/variantslib/variantslib.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/sexplib: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/sexplib/sexplib.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/fieldslib: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/fieldslib/fieldslib.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/pa_bench: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/pa_bench/pa_bench_lib.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/oUnit: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/oUnit/oUnitAdvanced.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/oUnit/oUnit.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/pa_ounit: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/pa_ounit/pa_ounit_lib.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/typerep_kernel: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/typerep_kernel/typerep_kernel.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/core_kernel: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/core_kernel/raise_without_backtrace.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/core_kernel/core_kernel.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/pa_test: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/pa_test/pa_test.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/core: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/core/core.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/core/core_top.cma: loaded 


# #require "core.top" 


# #require "core.syntax" 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/core/core_top.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/type_conv: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/type_conv/pa_type_conv.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/sexplib/pa_sexp_conv.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/fieldslib/pa_fields_conv.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/variantslib/pa_variants_conv.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/comparelib: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/comparelib/comparelib.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/comparelib/pa_compare.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/bin_prot/pa_bin_prot.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/custom_printf: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/custom_printf/pa_custom_printf.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/pa_pipebang: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/pa_pipebang/pa_pipebang.cma: loaded 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/herelib: added to search path 
/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/herelib/pa_herelib.cma: loaded 


# 

我已经安装了OCaml的,核心和OCaml的顶采用OPAM

$ opam config env 
CAML_LD_LIBRARY_PATH="/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/stublibs:/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/lib/ocaml/stublibs"; export CAML_LD_LIBRARY_PATH; 
OPAMROOT="/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam"; export OPAMROOT; 
PERL5LIB="/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/perl5:"; export PERL5LIB; 
OCAML_TOPLEVEL_PATH="/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/lib/toplevel"; export OCAML_TOPLEVEL_PATH; 
MANPATH="/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/man:/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/man:/usr/local/man:/usr/brlcad/share/man"; export MANPATH; 
PATH="/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/.opam/system/bin:/home/thelinuxkitten/ocamlbrew/ocaml-4.01.0/bin:/home/thelinuxkitten/debian/script:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/brlcad/bin"; export PATH; 

ocaml-top的网页有一个最简单的文档。 所以,我的问题是:任何人都知道,如果ocaml-top可以加载并打开像'core'这样的外部库?

感谢

+0

我不知道ocaml-top,但尝试在提示本身键入'#require“core”'。也许ocaml-top不读你的〜/ .ocamlinit文件。 –

+0

谢谢。它不处理指令。我是新手,我会尝试使用'-ocaml'选项向解释器发送参数。 –

+0

你需要ocaml-top吗?你也可以尝试'utop',这也很好。 –

回答

1

注意如何.ocamlinit#use "topfind"它发出其他指令前。这是因为topfind是一个ocaml脚本,它增加了对该指令的支持。

1

继推荐ygrek之后,我在ocaml-top的提示符中输入了.ocamlinit的内容,然后评估'open Core.Std ;;'作品。就像Ashish Agarwal说的那样,ocaml-top没有阅读.ocamlinit。

ocaml-top可以加载/打开外部库,但是集成ocaml的解释器的初始化必须手动完成。

感谢

+0

通常你不会将它输入到顶层,而是粘贴。 –

1

首先,确保你的.profile.bashrc包含以下内容:

eval `opam config env` 

然后打开该文件~/.opam/system/share/ocaml-top/toplevel_init.ml。该文件在启动时由ocaml-top读取。插入以下行:

let() = 
    try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") 
    with Not_found ->() 
;; 

#use "topfind" 
#thread 
#require "core" 
#require "core.top" 
#require "core.syntax" 
相关问题