type t (* void *)

関数型言語や英語学習の事とか。

OCaml: RWOを読み進めるためのOCaml設定

20150426加筆 RWOの説明を書いた
20150422加筆 より細かく書いた

20150909加筆 以下の内容はDebian 7向けに書かれており古いです! Debian 8ではより簡単にopamをインストール出来るようになっています! 下の記事では重複する部分は書きませんでしたが、インストール方法については下の記事が最新です。

no-maddojp.hatenablog.com

なんかちょっとだけOCaml環境構築が面倒みたいな話があったので、構築手順を書く。
大体確かめられた手順なのでよいはず。

Emacsのインストールまで解説しますが、RWOを読み始めるにあたりエディタの設定は必ずしも必要ではありません。
楽しんで下さい。

Real World OCamlとは

おそらく最もヘビーにOCamlを使っているであろうJaneStreetのデベロッパが書いたOCamlの入門書です。書籍も出版されていますがHTML版が全てWeb上で読むことが出来ます。

内容は素晴らしいです。実用的な道具を使いながらOCamlの基本的な機能から発展的な機能まで紹介し、実用的なライブラリの使い方・内部のランタイムシステムの解説までします。
入門書としても素晴らしいと思いますし、OCamlユーザにとっても読む価値があると思います。

英語版しか存在しませんが、そんなに難しい英語ではないので英語ドキュメントが読み解けるレベルの英語力があれば問題無いと思います。

また標準の道具ではなく、実用的なツールを使うことを想定し、またそれに強く依存しています。結構な手順が必要ですがそんなに難しくありません!
というわけで必要な手続きを全部まとめたいと思います。

設定が面倒・英語は嫌という方はプログラミング in OCamlを強く薦めます!
素晴らしい入門書です。(関数型)プログラミングの基礎から学べます。
入門に最適で、この本を読み終えれば実用的なOCamlプログラムを作り始められると思います。

gihyo.jp

20150513 追記
WROを改めてみてみると、再帰関数について例が足りない気がします。
少し慣れている人以外は何か補完が必要かもしれません。

例えば以下の講義スライドの例を見てみるといいのかもしれません。

https://courses.engr.illinois.edu/cs421/sp2012/lectures/lecture2.pdf

VMのインストール

VMware Player とかで、Debianを入れる。
Ubuntuなどでもいいと思いますが、ここではDebianを使うことを仮定します。安定性大事ですよね。

OPAMのインストール

OPAMはOCamlのためのパッケージ管理システムです。OPAMを通してライブラリ・コンパイラツールのインストール・管理をすることが出来ます。公式のツールではないですがデファクトスタンダードツールだと思います。

apt-getではインストールすることが出来ないので、新しいレポジトリを追加してインストールしましょう。
ルート権限が必要なことに注意です。

wget http://download.opensuse.org/repositories/home:ocaml/Debian_7.0/Release.key
apt-key add - < Release.key
echo 'deb  http://download.opensuse.org/repositories/home:/ocaml/Debian_7.0/' \
 >> /etc/apt/sources.list.d/opam.list
sudo apt-get update
sudo apt-get install -y opam

opamの初期化とコンパイラインストール

opam init --comp 4.02.1

コンパイラのインストールが始まります。
同時に色々初期設定をするために対話的に色々きいてくる。基本的にYesと言っておけば良いです。
.ocamlinitを作る設定は必ずしておいたほうが良いです!

utop, coreのインストール

opam install utop core -y

RWOはcoreという強化標準ライブラリと、強化対話環境を使うことを仮定しています。一行でインストールできますよー。

.ocamlinitの設定

~/.ocamlinit が作られて、#use "topfind" と書かれていることを確認しましょう!
これは対話環境から外部ライブラリを呼び出すのをより便利にするために必要です!

Real World OCamlを読む

https://realworldocaml.org/読む

RWOは基本的にutop上で、以下を実行していることを仮定するので気をつける。 #require "core"ディレクティブは上の#use "topfind"がちゃんと効いてないと動かないので気をつける!
面倒なら下も.ocamlinitに書いてもいいです!ちょっとロードが遅くなりますが!

#require "core";;
open Core.Std;;

Emacs24.5のインストール

これよりおまけ。Debian 7はapt-getで入れられるパッケージが結構古い。
Emacsも23しか入らないはず。

スーパーユーザー権限が必要なので注意。分からなかったらsuを実行してパスワードを入力した後実行する。

wget -q -O - http://londo.ganneff.de/apt.key | sudo apt-key add -

echo "deb http://londo.ganneff.de stable main" >> /etc/apt/sources.list.d/emacs-snapshot.list
echo "deb-src http://londo.ganneff.de stable main" >> /etc/apt/sources.list.d/emacs-snapshot.list

apt-get update
apt-get install emacs-snapshot -y

# お好みでemacsという短縮名で起動できるようにするaliasを作成
alias emacs=emacs-snapshot-x

Tuareg-modeのインストール

Emacsでmlファイルのインデンテーションやカラーリングを行うためのプラグインを入れる。 あなたのEmacs設定ファイル(通常は~/.emacs.d/init.el)に以下の設定を加える

(when (require 'package)
  (add-to-list
   'package-archives
   '("melpa" . "http://melpa.milkbox.net/packages/") t)
  (package-initialize))

その後M-x install-package tuaregで入る。

utopをEmacsから使う

せっていせってい。せっていを書く。
通常はutopemacsから呼び出すことを想定してないのでうまく動かないですが、それを動くようにします。
RWOはutop使うことを想定してますしね。

(setq opam-share 
  (substring (shell-command-to-string "opam config var share 2> /dev/null") 0 -1))
(add-to-list 'load-path (concat opam-share "/emacs/site-lisp"))

(require 'utop)

おわり

あとはちゃんとドキュメントを読む!
お好みでocp-indentmerlinを入れましょう。

opam.ocaml.org

opam.ocaml.org