プログラミング in OCaml > 第1章 はじめに
(プログラミングより引用)
#html{{
style type="text/css">
table, td, th {
border: 1px #ccc solid;
}
td, th {
padding: 5px;
}/style>
}}
パラダイム 分類 基礎となる計算モデル 事例 命令型 手続き型言語 チューリングマシン C, Java 宣言型 問合せ型言語 関係モデル SQL 関数型言語 ラムダ計算 Lisp, Haskell 論理型言語 一階述語言語 Prolog (参考:日経ソフトウエア 2008年3月号 55ページ)
関数(function)とは、高校の数学などで習ったf(x)=2x+1みたいな関数や、三角関数sinx、cosxといった関数のことです。
関数型言語の特徴的な考え方は、「プログラムは関数を組み合わせた式」である、ということです。
プログラムの実行は式の値を求めることです。
実際のプログラミングの作業は、例えば上のfのような関数を自分で定義することになります。
特に二点目は非常に重要です。
ただし、関数型プログラミングで楽をするためには、ひとつだけコツを身に着ける必要があります。
それが「再帰」(recursion)という考え方です。
プログラミング言語は、データの型(Type)の扱い方の違いによって、
プログラミング言語の用語としての「型」の意味は、「プログラム実行中に扱われるデータの種類」です。
(例)
かけ算や結合といった各種演算に対しては、
「かけ算は整数型のデータふたつに対して行われる」
「結合は文字列のふたつのデータに対して行われる」
といった、演算対象の型に関する約束事が決まっています。
人間に作られたプログラムで、データの型に関する約束事が守られていない場合、プログラム実行時に発生するエラーを型エラー(type error)と呼びます。
静的型付き言語におけるプログラム実行前のチェックのことを「静的型検査」(static type checking)といいます。
静的型付き言語は、静的型検査の厳密さによって、
「強く型付けされる」というのは、静的型検査によってプログラムの安全性が保証されることをいいます。
(プログラム実行時に型エラーが起こらない)
「弱く型付けされる」というのは、静的型検査に通ったプログラムでも安全性が保証されるわけではないことをいいます。
C言語は弱く型付けされる言語ですが、JavaやOCamlは強く型付けされる言語です。
強く型付けされる言語は、実行できるプログラムの種類を制限することによって安全性を確保しているので、よく「プログラミングの柔軟性が損なわれる」と言われます。
この点、OCamlでは、「多相的型システム」(polymorphic type system)という仕組みによって、かなり高い柔軟性が確保されています。
強く型付けされる言語では、たいていプログラマーが「ここは○○型ですよ」という意味の型宣言をしなければいけません。
(例:Javaの型宣言)
int number; // int型の変数numberを宣言 String str; // String型の変数strを宣言
OCamlでは、プログラマーはこのような型宣言を省略することができます。
その代わりにOCaml(の処理系)が「ここは○○型のはずですね」と型の種類を推論してくれます。
これが「型推論」(type inference)です。
OCamlでは、多相的型システムと型推論によって、できるだけ動的型付き言語に近い感覚でプログラムを書きつつ、安全性を確保することが可能になっています。