Haskellという言語名は論理学者Haskell B. Curryの名前が由来。静的型付けコンパイラ型言語ではあるが、型推論機能が利用できるため関数や変数の型宣言を省略することがある程度は可能。
Haskellにおける「関数」とは、受け取る引数の値がと関数の返り値が一意に対応し不変であるものに限定される。関数が内部状態を持つことは許可されない。そして変数の初期値は再代入によって変更することはできないという制約の下で、関数を引数に作用させて処理を進めていく方式の言語である。このような制約を持つため、プログラムの各部分の実行順序を任意に選ぶことができ、今後並列演算への対応も期待できる。
Haskellのためのフリーウェアの開発環境としてGHCやHugsがある。これらはeclipseからも利用することもできる。
Haskellで書かれた日本で有名なゲームにMonadiusというのがある。(GUIの処理ははOpenGLを利用したライブラリGLUTによるもの)
main = putStrLn "Hello world!"
※Haskellにおいて、文字列(String型)は文字(Char型)のリストとして扱う。リストは'['と']'でかこまれ、要素を','で区切る。
文字列"Hello world!" は文字のリスト ['H', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd', '!'] と同じもの。
繰り返し処理は、他言語によくあるforループのようなものではなく再帰呼び出しで行うのがHaskellなど関数型言語の流儀。
-- ガード節を使った例
factorial :: Int -> Int -- 関数名はfactorialとし、引数は整数型の値を一つ取る、返り値も整数型の値
factorial n
| n == 0 = 1 -- 引数nが0の場合、返り値は1とする
| otherwise = n * factorial (n - 1) -- それ以外の場合は再帰呼び出しを使って返り値を求める
-- 条件式if使った例
factorial :: Int -> Int
factorial n =
if n == 0 -- Haskell2010の規定により then/else節のインデントは揃えなくてもよい
then 1 -- 引数nが0の場合、返り値は1とする
else n * factorial (n - 1) -- それ以外の場合は再帰呼び出しを使って返り値を求める
-- case文のパターンマッチングを使った例 factorial :: Int -> Int factorial n = case n of
0 -> 1 -- 引数nが0の場合、返り値は1とする _ -> n * factorial (n - 1) -- それ以外の場合は再帰呼び出しを使って返り値を求める
-- 1からnまでの整数のリストを生成してその要素をすべてかけ算する例
-- 高階関数 foldl は、第2引数「1」と第3引数の整数リストの全要素を使って第1引数の「*」関数を適用 factorial :: Int -> Int factorial n = foldl (*) 1 [1..n] -- 具体的には、1 * (1 * 2 * 3 ....* n) の演算が行われる
Haskellに関するニコニコ動画の動画を紹介してください。
Haskellに関するニコニコミュニティを紹介してください。
急上昇ワード改
最終更新:2025/12/15(月) 05:00
最終更新:2025/12/15(月) 05:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。