Haskellとは?

辞典・百科事典の検索サービス - Weblio辞書

初めての方へ

参加元一覧


用語解説|製品情報|動画|本・雑誌|文献|商品|全文検索

IT用語辞典バイナリ

IT用語辞典バイナリIT用語辞典バイナリ

Haskell

読み方ハスケル

Haskellとは、遅延評価など多く先進的概念取り込んだ純粋な関数型プログラミング言語である。

Haskellの言語仕様1987年に作られた。言語の名称は記号論理学者Haskell Brooks Curryの名にちなんでいる。プログラミング言語としては、現在産業用に用いられているC++Java等の他の言語とはかなり異なった性格を持っており、直接原型となったMirandaや同様の関数型言語であるMLなどに近い部類属する。

Haskellの大きな特徴として、遅延評価挙げることができる。遅延評価とは、具体的な値が必要になった時点計算実行するというものである。また純粋な関数型言語であるため、副作用の無い関数合成が可能である。この点は、代入などの副作用を伴うC言語などの一般的なプログラミング言語とは異なっている。その他の顕著特徴として、高階関数静的多相型付けパターン照合リスト内包表記豊富なデータ型リスト配列任意倍長整数など)の提供、などが挙げられる。

Haskellは現在、主にソフトウェア研究の場で利用されている。これまでソフトウェアコンテストなどで、プログラミング言語としての高い能力証明してきた。典型的には、抽象度が要求される数学的な問題対すプログラミングにおいて高い生産性を持つとされる。また複雑で大規模になりがちなシステムを、その高い抽象能力によって簡潔記述できる、とされている。しかし反面標準Haskellレベルでは、現実利用シーンで弱いケースもある。例えIO処理については、IOモナドという機構により入出力機能補完が必要になる。


参照リンク
本物のプログラマはHaskellを使う - (日経BP ITpro
HaskellWiki - (英文
プログラミングのほかの用語一覧
プログラミング言語の種類:  Fortran  GLUT  Go  Haskell  フォートラン  Java  関数型言語


ウィキペディア

ウィキペディアウィキペディア

Haskell

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2011/11/01 04:50 UTC 版)

Haskell(ハスケル)は非正格な評価を特徴とする純粋関数型プログラミング言語である。名称は論理学者であるハスケル・カリー (Haskell B. Curry)に由来する。


  1. ^ かつては Goffin と呼ばれていた。
  2. ^ 「変数」は実際にはその値を動的に変更することはできないなど、C言語など手続き型言語の変数とは明らかに異なるものである。値を変更することはできなくても、言語仕様においてもこれは "variable" と呼ばれている。
  3. ^ ここでは説明のため単に Float としているが、標準ライブラリで定義されている円周率 pi は浮動小数点数型の抽象的な型クラスである Floating a で定義されており、Float のみならず 倍精度浮動小数点数型 Double の値としても取得できる。
  4. ^ Haskell はカリー化によりすべての関数を 1 引数の関数として表現できるが、これにしたがって -> は右結合であるとして読むこともできる。上記の関数の型の定義は、括弧を明示した次の定義と同等である。
    gcd :: Int -> (Int -> Int)
    

    関数を引数にとる関数は、引数の型を括弧で囲んで -> 記号の優先順位を指定すればよい。次は関数を二つとり、その合成関数を返す演算子 . の定義である。

    (.) :: (b -> c) -> (a -> b) -> a -> c
    
  5. ^ 式の外で演算子の型を指定するときは、演算子を括弧で囲めばよい。以下の関数と演算子の相互変換を参照のこと。
  6. ^ これは、C++ や Java のような言語では次のようなコードに相当する。
    Hashtable<String,Int> hashtable;
    
  7. ^ 当然ながら、リストの要素としてリストを持つこともできる。例えば、複数の文字列からなる文の型は [[Char]] となるであろう。
  8. ^ ユニットはC言語やJavaなどでいう void のような使われ方をする。
  9. ^ 言い換えれば、単純な型名に見えても何か複雑な別の型の別名である可能性がある。
  10. ^ 実際に標準ライブラリでは String は [Char] の別名であり、String にはあらゆるリストの操作が可能である。
  11. ^ 除算する演算子 / は存在するが、これは Float などを除算する演算子であり整数ではない。他の言語のように自動的に値を変換する( int → float など)ような動作は Haskell では意図的に排除されている。
  12. ^ ただし、正格評価のほうが効率がいい場合もあり、必要に応じて正格評価もできる。
  13. ^ Haskellの型システムにおける汎用型が実体化されたもの。オブジェクト指向におけるインスタンスとは異なる。
  14. ^ ただし、型を明示することは可読性を向上したり問題の発見に役立つため、常に省略するのがよいとは限らない。なお、次のコードは型宣言が必要な例である。read は文字列をその文字列があらわすデータ型に変換する抽象化された関数である。
    main = print (read "42")    -- コンパイルエラー!
    

    このコードはコンパイルエラーになる。read は複数のインスタンスで実装されており、数値なら数値型に変換する read 、リストならリストに変換する read というように型ごとに実装が存在する。Haskell の型は総て静的に決定されなければならない。このコード場合、プログラマは

    read :: String -> Int
    

    という型をもつ実装の read が選択されると期待しているであろうが、これはコンパイラによる静的な型検査では決定できない。つまり、Haskell コンパイラは read の返り値を受け取っている関数 print の型を検査し多数の実装の中から適切な read を選択しようとするが、print は Show のインスタンスが存在するあらゆる型を引数にとるため、型推論によっても read の型を一意に決定できない。これを解消するひとつの方法は、:: によって型を明示することである。

    main = print ((read "42") :: Int)    -- コンパイル成功!read の返り値を Int と明示している
    

    また、そもそも read の返り値を整数型しか取らない関数に与えていればあいまいさは生じず、型推論は成功する。

    printIntOnly :: Int -> IO ()
    printIntOnly x = print x
     
    main = printIntOnly (read "42")    -- コンパイル成功!
    

    他の言語、たとえば Java でこのような抽象的な関数を書こうとしても、Java では返り値の値の型によって関数を選択するようなことはできない(引数の型によって選択するメソッドのオーバーロードは存在する)。そのため、関数の実装ごとに別の名前をつけてプログラマに明示的に選択させて解決させることになる( java.lang.Integer.parseInt()、java.lang.Double.parseDouble() など)。この方法は簡潔でわかりやすいが、抽象性の高さに基づく再利用性という点では Haskell のような多相には劣ってしまう。

  15. ^ データ型名とデータコンストラクタ名は同じでも構わない。このような単純な代数的データ型であれば型名とデータコンストラクタ名を同じにすることも多い。
  16. ^ GHC には System.IO.Unsafe モジュールに unsafePerformIO という関数があり、副作用を持ちながらアクションでない型を返すことができる。これは参照透過性に対するバックドアであり、Haskell の参照透過性を破壊する恐れがあるので、注意深く使わなければならない。
  1. ^ a b c Preface”. Haskell 98 Language and Libraries: The Revised Report (2002年12月). 2009年6月23日閲覧。
  2. ^ The History of Haskell”. 2009年6月23日閲覧。
  3. ^ Simon Peyton Jones (editor) (2002年12月). “Haskell 98 Language and Libraries: The Revised Report”. 2009年6月23日閲覧。
  4. ^ Future development of Haskell”. 2009年6月23日閲覧。
  5. ^ Welcome to Haskell'”. The Haskell' Wiki. 2009年6月23日閲覧。






固有名詞の分類



Haskellに関連した本


Haskellに関係した商品


Haskellのページへのリンク
「Haskell」の関連用語
Haskellのお隣キーワード
モバイル
モバイル版のWeblioは、下記のURLからアクセスしてください。
http://m.weblio.jp/
» モバイルで「Haskell」を見る
_ _   


Haskellのページの著作権
Weblio 辞書情報提供元は参加元一覧にて確認できます。

  
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2012 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリHaskellの記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのHaskell (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2012 Weblio RSS