ocamlのtoplevelで手軽にcoreを使う方法
ocamlのtoplevelで手軽にcoreを使う方法
core に色々なモジュールが定義されている。 これらを試すために毎回実行ファイルを作成するのもだるかったのでtoplevelから使えないか調べてみた。
例えばemacsのtuareg-mode上立ち上げたtoplevelなどで使っている。
以下の様にすると出来る。
#use "topfind";; #require "core_kernel";; open Core_kernel.Std;;
読み込めるpackageを調べるには"#list"を使っても良いしocamlfind -list | grep <package>
とかしても良い。
テキトウに試してみた結果。
List.iter
がCore_kernel.Std.List.iter
に置き換わっていることを確認して、何かてきとうな関数を作ってみる。
ocaml OCaml version 4.02.1 # #use "topfind";; #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 = () # #require "core_kernel";; #require "core_kernel";; ~/.opam/4.02.1/lib/ocaml/unix.cma: loaded ~/.opam/4.02.1/lib/ocaml/bigarray.cma: loaded ~/.opam/4.02.1/lib/bin_prot: added to search path ~/.opam/4.02.1/lib/bin_prot/bin_prot.cma: loaded ~/.opam/4.02.1/lib/custom_printf: added to search path ~/.opam/4.02.1/lib/custom_printf/custom_printf.cma: loaded ~/.opam/4.02.1/lib/variantslib: added to search path ~/.opam/4.02.1/lib/variantslib/variantslib.cma: loaded ~/.opam/4.02.1/lib/sexplib: added to search path ~/.opam/4.02.1/lib/sexplib/sexplib.cma: loaded ~/.opam/4.02.1/lib/enumerate: added to search path ~/.opam/4.02.1/lib/fieldslib: added to search path ~/.opam/4.02.1/lib/fieldslib/fieldslib.cma: loaded ~/.opam/4.02.1/lib/pa_bench: added to search path ~/.opam/4.02.1/lib/pa_bench/pa_bench_lib.cma: loaded ~/.opam/4.02.1/lib/oUnit: added to search path ~/.opam/4.02.1/lib/oUnit/oUnitAdvanced.cma: loaded ~/.opam/4.02.1/lib/oUnit/oUnit.cma: loaded ~/.opam/4.02.1/lib/pa_ounit: added to search path ~/.opam/4.02.1/lib/pa_ounit/pa_ounit_lib.cma: loaded ~/.opam/4.02.1/lib/pa_test: added to search path ~/.opam/4.02.1/lib/pa_test/pa_test_lib.cma: loaded ~/.opam/4.02.1/lib/typerep_lib: added to search path ~/.opam/4.02.1/lib/typerep_lib/typerep_lib.cma: loaded ~/.opam/4.02.1/lib/core_kernel: added to search path ~/.opam/4.02.1/lib/core_kernel/core_kernel.cma: loaded # open Core_kernel.Std;; open Core_kernel.Std;; # List.iter;; List.iter;; - : 'a Core_kernel.Std.List.t -> f:('a -> unit) -> unit = <fun> # let main () = let xs = [1;2;3] in List.iter ~f:(fun x -> x |> string_of_int |> print_string) xs ;; let main () = let xs = [1;2;3] in List.iter ~f:(fun x -> x |> string_of_int |> print_string) xs ;; val main : unit -> unit = <fun> # main();; main();; 123- : unit = ()
参考
追記
-init
オプションで初期化時に読み込むファイルを指定できるらしい。
以下のようなocaml-toplevelというコマンドを作った。
~/bin/ocaml-toplevel
#!/bin/sh eval `opam config env` if [ -f ~/.ocamlrc ]; then ocaml -init ~/.ocamlrc else ocaml fi
.ocamlrc
#use "topfind";; #require "core_kernel";; open Core_kernel.Std;;
tuareg-modeの指定を以下の様にした。
(when (executable-find "ocaml-toplevel") (setq tuareg-interactive-program "ocaml-toplevel"))