Haskell

目次
Haskellとは
Haskell(ハスケル)は、1990年に設計された純粋関数型プログラミング言語であり、数学的な関数の概念に基づいて構築されています。遅延評価や高い型安全性を持ち、関数型プログラミングの代表的な言語として知られています。
Haskellの特徴
Haskellは、以下のような特徴を持つプログラミング言語です。
- 純粋関数型言語: 副作用を排除し、関数の入力に対して常に同じ出力を返す。
- 遅延評価: 必要な値だけ計算を行うため、効率的なメモリ管理が可能。
- 静的型付け & 型推論: 強力な型システムにより、コンパイル時にエラーを検出。
- 高階関数: 関数を引数として渡したり、関数を返すことが可能。
- モナド: 副作用を制御し、安全に状態を管理できる仕組みを提供。
Haskellの基本構造
以下に、Haskellプログラムの基本的な構造を示します。
基本的なHaskellプログラムの例
main :: IO ()
main = putStrLn "Hello, World!"
Haskellの基本構文
1. 変数とデータ型
Haskellでは、変数は定数のように扱われ、一度定義された値は変更できません。
データ型の例
データ型 | 意味 | 例 |
---|---|---|
Int | 整数型 | let x :: Int; x = 10 |
Double | 倍精度浮動小数点数型 | let pi :: Double; pi = 3.1415 |
Char | 1文字 | let letter :: Char; letter = 'A' |
String | 文字列型 | let name :: String; name = "Taro" |
Bool | 真偽値型 | let isActive :: Bool; isActive = True |
List | リスト型 | let numbers :: [Int]; numbers = [1, 2, 3, 4, 5] |
2. 条件分岐(if文)
Haskellのif
文は、必ずelse
とセットで使用されます。
checkNumber :: Int -> String
checkNumber x =
if x > 0 then "Positive"
else if x == 0 then "Zero"
else "Negative"
main :: IO ()
main = putStrLn (checkNumber (-5))
3. 繰り返し処理(再帰)
Haskellには一般的なループ構文(for, while)がなく、再帰を使って繰り返し処理を行います。
再帰関数の例
factorial :: Int -> Int
factorial 0 = 1
factorial n = n * factorial (n - 1)
main :: IO ()
main = print (factorial 5)
4. 高階関数
関数を引数に取る、または関数を返す関数を「高階関数」と呼びます。
applyTwice :: (a -> a) -> a -> a
applyTwice f x = f (f x)
double :: Int -> Int
double x = x * 2
main :: IO ()
main = print (applyTwice double 3) -- 出力: 12
5. リスト操作
Haskellではリストを活用したプログラムが多く書かれます。
main :: IO ()
main = do
let numbers = [1, 2, 3, 4, 5]
print (map (*2) numbers) -- すべての要素を2倍
print (filter even numbers) -- 偶数のみ抽出
6. 型定義とデータ構造
Haskellでは、新しい型を定義することができます。
data Person = Person { name :: String, age :: Int }
introduce :: Person -> String
introduce (Person n a) = "私は " ++ n ++ " です。年齢は " ++ show a ++ " 歳です。"
main :: IO ()
main = putStrLn (introduce (Person "山田 太郎" 25))
Haskellの用途
Haskellは、以下のような分野で活用されています。
- 数理計算: 数学や物理学のモデリング、解析。
- コンパイラ開発: GHC(Glasgow Haskell Compiler)のような言語処理系の開発。
- 金融システム: 高い安全性と信頼性を求められる金融システム開発。
- 人工知能: 機械学習アルゴリズムの実装。
- Web開発: YesodのようなWebフレームワークを利用したWebアプリ開発。
Haskellのメリット
- コードの安全性が高い: 静的型付けと純粋関数によってバグを減らせる。
- 並列・並行処理が得意: 副作用がないため、並列処理がしやすい。
- コードの再利用性が高い: 高階関数や型システムを活用し、柔軟な設計が可能。
Haskellのデメリット
- 学習コストが高い: 遅延評価やモナドの概念に慣れるのが難しい。
- 実務での採用が少ない: JavaやPythonに比べて、Haskellを使用する企業が少ない。
- 実行速度のオーバーヘッド: 最適化されないとC/C++より遅くなる場合がある。
まとめ
Haskellは、純粋関数型言語として高い安全性と強力な型システムを提供し、並列処理や数理計算などに適した言語です。学習コストは高いものの、関数型プログラミングの理解を深めるのに適しています。