Haskell 単語


ニコニコ動画でHaskellの動画を見に行く

ハスケル

2.1千文字の記事
これはリビジョン 1753756 の記事です。
内容が古い・もしくは誤っている可能性があります。
最新版をみる

Haskellとは、関数型プログラミング言語の一種である。

概要

Haskellという言語名は論理学者Haskell B. Curryの名前が由来。静的型付けコンパイラ型言語ではあるが、型推論機能が利用できるため関数や変数の型宣言を省略することがある程度は可能。
Haskellにおける「関数」とは、受け取る引数の値がと関数の返り値が一意に対応し不変であるものに限定される。関数が内部状態を持つことは許可されない。そして変数の初期値は再代入によって変更することはできないという制約の下で、関数を引数に作用させて処理を進めていく方式の言語である。このような制約を持つため、プログラムの各部分の実行順序を任意に選ぶことができ、今後並列演算への応用も期待できる。
Haskellにおいて、標準入出力を用いた処理など純粋な関数表現では実現できない処理は「アクション」と呼ばれ「関数」とは区別しているが、両者を同一プログラム内で矛盾を起こさないように共存させる仕組みが提供されている。

Haskellのためのフリーウェアの開発環境としてGHCやHugsがある。(これらはeclipseからも利用することもできる)
Haskellで書かれた日本で有名なゲームにMonadiusというのがある。(GUIの処理ははOpenGLを利用したライブラリGLUTによるもの)

コード表記の例など

  • Hello worldの例
    main = putStrLn "Hello world!"

Haskellにおいて、文字列(String型)は文字(Char型)のリストとして扱う。リストは列挙した要素群を'['と']'で囲み、各要素の間は','で区切る。
文字列"Hello world!" は文字のリスト ['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!'] と同じもの。

Lispにおけるリスト表現で、

(1 . (2 . (3 .(4 . ()))))

と 

(1  2  3  4)

が同一のリストのを表わすように、

Haskellでは、

1 : (2 : (3 : (4 : [])))    ※丸括弧を省略して、 1 : 2 : 3 : 4 : [] と書いてもよい

と 

[1, 2, 3, 4]

は同一のリストを表わす。 

  • Lispのコード表記との比較例 (記号「→」以降に式の評価結果を記す)
コードの説明 Haskell Lisp
リストの先頭要素取り出し
head  [1, 2, 3]
→ 1
(car  '(1 2 3))
→ 1
リストの先頭要素を除いた残り部分の取り出し
tail  [1, 2, 3]
→ [2, 3]
(cdr  '(1 2 3))
→ '(2 3)
リストに先頭要素を追加
1 : [2, 3]
→ [1,2,3]
(cons 1 '(2 3))
→ '(1 2 3)
空リスト判定
null  []
→ True
(null?  '())
→ #t 
無名関数を使った演算
(\x  y  ->  x + y)  1  2
→ 3
((lambda  (x  y) (+ x  y)) 1  2)
→ 3
  • 自然数nの階乗 n ! を求めるコードの例 

繰り返し処理は、他言語によくあるforループのようなものではなく再帰呼び出しで行うのがHaskellなど関数型言語の基本的な流儀。

-- 条件式if使った例

factorial :: Int -> Int   -- 関数名はfactorialとし、引数は整数型の値を一つ取る、返り値も整数型の値
factorial n =
        if n == 0              -- Haskell2010の規定により then/else節のインデントは揃えなくてもよい
        then 1        -- 引数nが0の場合、返り値は1とする     else n * factorial (n - 1) -- それ以外の場合は再帰呼び出しを使って返り値を求める
-- ガード節を使った例

factorial :: Int -> Int
factorial n
        | n == 0     = 1                          -- 引数nが0の場合、返り値は1とする
        | otherwise = 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に関するニコニコ動画の動画を紹介してください。

関連商品

ニコニコ市場は2023年11月に終了しました。ニコニコ市場は2023年11月に終了しました。ニコニコ市場は2023年11月に終了しました。ニコニコ市場は2023年11月に終了しました。ニコニコ市場は2023年11月に終了しました。ニコニコ市場は2023年11月に終了しました。 ニコニコ市場は2023年11月に終了しました。 ニコニコ市場は2023年11月に終了しました。

関連コミュニティ

Haskellに関するニコニコミュニティを紹介してください。

関連項目

  • プログラミング
  • 関数
  • 再帰
  • 高階関数
  • クロージャ
  • モナド
  • 継続
  • / 圏論
  • 関数型言語
    • Lisp
    • Scheme
  • プログラミング言語
  • プログラミング関連用語の一覧

参考外部リンク

おすすめトレンド

ニコニ広告で宣伝された記事

記事と一緒に動画もおすすめ!
もっと見る

急上昇ワード改

最終更新:2025/12/15(月) 05:00

ほめられた記事

最終更新:2025/12/15(月) 05:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP