OCamlは関数型言語の一つで、実用性の高さで人気があります。オブジェクト指向や強い静的型付けなどの特徴を持ち、実行速度がC言語並みに速いことも特徴の一つです。筆者の中ではデキるプログラマーが好んで使っているイメージがあります。Microsoftが開発した.NET対応言語のF#をはじめ、多くの言語にも大きな影響を与えました。今回は、OCamlについて紹介します。
○OCamlについて
OCamlは、もともとプログラミング言語ML言語の方言の一つです。もともと、「Objective Caml」という名前でしたが、OCamlに改名されました。つまり、OCamlのOはオブジェクト指向のOなのです。1996年にフランスのINRIA(フランス国立研究所)で開発されました。
残念ながら原稿執筆時点では、TIOBE Indexなどの人気プログラミング言語ベスト50にはランクインしていません。しかし50位以下の『次の50言語』には含まれています。
なお、関数型プログラミング言語とは複数の式を組み合わせてプログラムを作るパラダイムです。最近では、ScalaやF#が頑張っていることもあり、関数型のプログラミング言語もそれなりに使われていますが、C言語やJavaなど『手続き型』のプログラミング言語の方が多数派です。ただし、関数型言語で役立つ機能や考え方は、JavaScriptやRustなど新しいプログラムに積極的に取り込まれています。
OCamlの特徴は、強力な型システムであり『型推論』という便利な機能を持っています。この型推論の機能は、明示的なデータ型の宣言を省略して書くことができるというものです。Go言語やRustなど比較的新しい静的型付け言語には当然のように搭載されるようになりました。
どんなプロダクトで使われているのでしょうか。プログラミング言語のHaxeやRust(初期バージョン)、MediaWikiの数式画像を生成するプログラムや、Facebookが開発したJavaScript構文チェッカーのFlowなど、プログラミング言語の関連ツールでOCamlが使われています。
○OCamlのインストール
Windows用のOCamlは、こちらのWebサイトで配布されています。インストーラーの形式です。インストールするには、EXE形式のファイルを右クリックし「管理者として実行」をクリックします。すると、インストーラーが起動するので、数回[Next]を押せばインストールが完了します。OCamlを動かすためにCygwinをインストールするため、若干インストールに時間がかかる場合があります。
なお、上記のWindows用のインストーラーを利用してインストールするのも良いのですが、WSL(Windows Subsystem for Linux)もオススメです。こちらを参考に、Ubuntu(Linux)をインストールし、その上でコマンド『sudo apt install ocaml』を実行すると、素直にOCamlをインストールできます。
そして、macOSでは、Homebrewを利用してインストールできます。コマンドラインで『brew install ocaml』のコマンドを実行するとインストールされます。
○簡単なプログラムを作ってみよう
それでは、OCamlを使って簡単なプログラムを作ってみましょう。以下は、画面に「Hello, OCaml.」とだけ出力するプログラムです。
(* 挨拶を表示 *)
print_endline "Hello, OCaml."
プログラムを実行するには、上記のプログラムを「hello.ml」という名前で保存します。そして、コマンドラインで『ocaml hello.ml』とタイプします。すると、以下のように表示されます。
OCamlでは、コメントは『(* ... *)』のように書きます。そして、print_endline関数で文字列を画面に表示します。これだけ見ると、他のプログラミング言語とそれほど違いがない気がしますね。
○FizzBuzz問題のプログラム
次にOCamlを使ってFizzBuzz問題を解いてみましょう。FizzBuzz問題とは、以下のような問題です。この問題は、条件分岐や繰り返しなどを使うことが必須なので、プログラミング言語の雰囲気を見るのに向いています。
> 1から100までの数を出力するプログラムを書いてください。ただし、3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と表示してください。3と5の倍数の時は「FizzBuzz」と表示してください。
以下のプログラムを「fizzbuzz.ml」という名前で保存します。
(* FizzBuzzの条件を定義 --- ※1 *)
let is_fizz n = (n mod 3) = 0
let is_buzz n = (n mod 5) = 0
let is_fizzbuzz n = is_fizz(n) && is_buzz(n)
(* FizzBuzzを出力する関数 --- ※2 *)
let fizzbuzz n =
if is_fizzbuzz n then "FizzBuzz"
else if is_fizz n then "Fizz"
else if is_buzz n then "Buzz"
else string_of_int n;;
(* 1から100まで出力 --- ※3 *)
let rec loop n =
if n
PCMAX
ITトピックス
ITランキング
- 1
ミスドネットオーダーにて、受取前日までの予約注文限定!ミスタードーナツ『チュロ・デ・ダグトリオ』画像あり
- 2
アジアのファッションハブへと進化する マカオ 。強い個性が生む新商機【マカオファッションフェスティバル2024レポート】画像あり
- 3
山口県美祢市との地方創生に関する連携協定を締結!よしもとセールスプロモーション&エリアアクション画像あり
- 4
電源タップもしっかり固定できる!クランプ固定の金属製バッグハンガー画像あり
- 5
野球 × ヒップホップ × ストリートから着想。 ローリングスの新ブランド「コンバットMFG」にみる若年層攻略法画像あり
- 6
CISA初の最高人工知能責任者(CAIO)が就任、その理由とは画像あり
- 7
アプリ「妖怪ウォッチ ワールド」ジャイロセンサーやカメラ機能がなくても遊べるようにアップデート画像あり
- 8
落合陽一、自ら神職となる!ヌルの神様と、オブジェクト指向菩薩が鎮まる、計算機自然神社とは?画像あり
- 9
アジェのL’Allée de la Duchesse, vers les Cascades, en Hiver(滝に向かう小路)など『M84収蔵作品展』【Art Gallery M84】画像あり
- 10
“和ごころ”あふれる、ご褒美バーガー!「一頭買い 黒毛和牛バーガー 〜山わさび醤油仕立て〜」画像あり