関数型言語のカリスマ、OCaml (※個人の感想です)

OCamlは、フランス発祥の関数型のプログラミング言語です。bonjour!

歴史はそこそこあり、1996年に登場しました(Wikipedia調べ)

そもそも関数型ってなによ?

プログラミングパラダイムのひとつで、語弊をおそれずに端的にいうと、処理の記述スタイルのうちの1つでしょうか。

プログラミングパラダイムとして代表的なものは、この関数型の他、手続き型があります。
C言語Java等、代表的な言語がいっぱいあります。

詳しくはググりましょう

とりあえずさわってみましょう

まぁ細かいことはヌキにして、まずは書いてみましょうか。まずは手を動かそう。

インストール

ArchLinux を使っているので、以下コマンドでインストール。

$ sudo pacman -S ocaml

あ、話は変わりますけど、Win/Linuxのクロスプラットフォームを考えてるなら、Debian + MinGWがおすすめっぽいです。
OCamlのMinGWパッケージが環境作り・動作確認ファイル作成がカンタンです。

HelloWorld.ml

スクリプト言語みたく、対話式でも使用できますが、やっぱり普通はソースファイルに落とし込みますよね。

OCamlのソースファイルは、mlの拡張子で保存するのが通例のようです。

元となった言語ML(Meta Language)の名残のようですね。

(* Hello World *)

print_string "Hello, World!\n";;

実行

ocamlインタプリタに通せば、スクリプト的に実行できます。

$ ocaml HelloWorld.ml
Hello, World!

バイトコードにコンパイルして実行
バイトコードはocamlrunで実行する形式のファイルです。
Javaでいう、classファイルみたいな位置づけです。

(ファイル冒頭に、#!/usr/bin/ocamlrun の記述があります)

$ ocamlc -o HelloWorld HelloWorld.ml
$ ./HelloWorld
Hello, World!

ネイティブコードにして実行
普通の実行形式ファイルになります。
生成されるファイルはC言語と比べると少し大きめ。stripすると少し小さくなります。

$ ocamlopt -o HelloWorld HelloWorld.ml
$ ./HelloWorld
Hello, World!

すこし説明

コメント

ソースファイルの冒頭で登場している(**)で囲まれた文字は、コメントです。

C言語等と違い、ネストすることができます。

つまり

(*
 * こういう
 * (*書き方が*)
 * できます
 *)

これは、処理のコメントアウト等をする場合に便利でしょう。

関数の呼び出し

OCamlでは、関数名 引数 で関数を呼び出すことができます。

上記では、print_string関数を、“Hello, World!”を引数に設定して呼び出しています。

関数呼び出しの行を手続き型言語で書くと、以下のようになります。
(例は、C言語風の疑似コード)

print_string("Hello, World!");


blog comments powered by Disqus

Published

08 July 2017

Tags