Haskell
Haskellとは、遅延評価など多くの先進的な概念を取り込んだ純粋な関数型プログラミング言語である。
Haskellの言語仕様は1987年に作られた。言語の名称は記号論理学者Haskell Brooks Curryの名にちなんでいる。プログラミング言語としては、現在産業用に用いられているC++、Java等の他の言語とはかなり異なった性格を持っており、直接の原型となったMirandaや同様の関数型言語であるMLなどに近い部類に属する。
Haskellの大きな特徴として、遅延評価を挙げることができる。遅延評価とは、具体的な値が必要になった時点で計算を実行するというものである。また純粋な関数型言語であるため、副作用の無い関数合成が可能である。この点は、代入などの副作用を伴うC言語などの一般的なプログラミング言語とは異なっている。その他の顕著な特徴として、高階関数、静的多相型付け、パターン照合、リストの内包表記、豊富なデータ型(リスト、配列、任意倍長整数など)の提供、などが挙げられる。
Haskellは現在、主にソフトウェア研究の場で利用されている。これまでソフトウェアコンテストなどで、プログラミング言語としての高い能力を証明してきた。典型的には、抽象度が要求される数学的な問題に対するプログラミングにおいて高い生産性を持つとされる。また複雑で大規模になりがちなシステムを、その高い抽象能力によって簡潔に記述できる、とされている。しかし反面、標準Haskellレベルでは、現実の利用シーンで弱いケースもある。例えばIO処理については、IOモナドという機構により入出力機能の補完が必要になる。
参照リンク
本物のプログラマはHaskellを使う - (日経BP ITpro)
HaskellWiki - (英文)
Haskell
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/04/25 23:17 UTC 版)
- ^ 出典URL: https://mail.haskell.org/pipermail/haskell/2009-November/021750.html, 閲覧日: 2023年1月11日, 題名: [Haskell] Announcing Haskell 2010, 出版日: 2009年11月24日
- ^ かつては Goffin と呼ばれていた。
- ^ a b c “Preface”. Haskell 98 Language and Libraries: The Revised Report (2002年12月). 2009年6月23日閲覧。
- ^ “The History of Haskell”. 2009年6月23日閲覧。
- ^ Simon Peyton Jones (編) (2002年12月). “Haskell 98 Language and Libraries: The Revised Report”. 2009年6月23日閲覧。
- ^ “Future development of Haskell”. 2009年6月23日閲覧。
- ^ “Welcome to Haskell'”. The Haskell' Wiki. 2009年6月23日閲覧。
- ^ 英: language-pragma-syntax-extension
- ^ 「変数」は実際にはその値を動的に変更することはできないなど、C言語など手続き型言語の変数とは明らかに異なるものである。
- ^ ここでは説明のため単に Float としているが、標準ライブラリで定義されている円周率
pi
は浮動小数点数型の抽象的な型クラスであるFloating a
で定義されており、Float
のみならず 倍精度浮動小数点数型Double
の値としても取得できる。 - ^ Haskell はカリー化によりすべての関数を 1 引数の関数として表現できるが、これにしたがって
->
は右結合であるとして読むこともできる。上記の関数の型の定義は、括弧を明示した次の定義と同等である。gcd :: Int -> (Int -> Int)
関数を引数にとる関数は、引数の型を括弧で囲んで -> 記号の優先順位を指定すればよい。次は関数を二つとり、その合成関数を返す演算子 . の定義である。
(.) :: (b -> c) -> (a -> b) -> a -> c
- ^ 式の外で演算子の型を指定するときは、演算子を括弧で囲めばよい。以下の関数と演算子の相互変換を参照のこと。
- ^ これは、C++ や Java のような言語では次のようなコードに相当する。
Hashtable<String,Int> hashtable;
- ^ 当然ながら、リストの要素としてリストを持つこともできる。例えば、文字リスト(文字列)のリストの型は
[[Char]]
となるであろう。 - ^ ユニットはC言語や Java などでいう
void
のような使われ方をする。 - ^ 言い換えれば、単純な型名に見えても何か複雑な別の型の別名である可能性がある。
- ^ 実際に標準ライブラリでは
String
は[Char]
の別名であり、String
にはあらゆるリストの操作が可能である。 - ^ type values are built from type constructors. haskell2010
- ^ Char, Int, Integer, Float, Double and Bool are type constants with kind ∗. haskell2010
- ^ Maybe and IO are unary type constructors, and treated as types with kind ∗→∗. haskell2010
- ^ 除算する演算子
/
は存在するが、これはFloat
などを除算する演算子であり整数ではない。他の言語のように自動的に値を変換する(int → float など)ような動作は Haskell では意図的に排除されている。 - ^ Haskell の型システムにおける汎用型が実体化されたもの。オブジェクト指向におけるインスタンスとは異なる。
- ^ ただし、型を明示することは可読性を向上したり問題の発見に役立つため、常に省略するのがよいとは限らない。
- ^
java.lang.Integer.parseInt
、java.lang.Double.parseDouble
など - ^ 英: algebraic data type
- ^ データ型名とデータコンストラクタ名は同じでも構わない。このような単純な代数的データ型であれば型名とデータコンストラクタ名を同じにすることも多い。
- ^ 英: section
- ^ 英: type class
- ^ 英: action
- ^ GHC には
System.IO.Unsafe
モジュールにunsafePerformIO
という関数があり、副作用を持ちながらアクションでない型を返すことができる。これは参照透過性に対するバックドアであり、Haskell の参照透過性を破壊する恐れがあるので、注意深く使わなければならない。 - ^ 英: corecursion
- ^ Haskellの神話 - あどけない話
- ^ attoparsec: Fast combinator parsing for bytestrings and text
- ^ trifecta: A modern parser combinator library with convenient diagnostics
- ^ Home — The Glasgow Haskell Compiler
- ^ 英: good for equational reasoning
- ^ http://www.cs.chalmers.se/~augustss/hbc/hbc.html (リンク切れ)
- ^ http://foswiki.cs.uu.nl/foswiki/Helium
- ^ Hugs 98
- ^ jhc
- ^ nhc98
- ^ Yhc - HaskellWiki
Haskell
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/29 20:16 UTC 版)
(※ Haskellのリストは「長さを測って半分ずつに分ける」という操作には適さないため、要素を1個ずつ振り分ける関数を使っている。この実装では安定ではない) mergesort :: Ord t => [t] -> [t]mergesort lst = case lst of [] -> lst [_] -> lst _ -> merge (mergesort a) (mergesort b) where (a, b) = split lst merge [] [] = [] merge xxs [] = xxs merge [] yys = yys merge xxs@(x : xs) yys@(y : ys) | x < y = x : (merge xs yys) | otherwise = y : (merge xxs ys) split [] = ([], []) split ~(x : xs) = (x : zs, ys) where (ys, zs) = split xs
※この「Haskell」の解説は、「マージソート」の解説の一部です。
「Haskell」を含む「マージソート」の記事については、「マージソート」の概要を参照ください。
Haskell
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/16 06:22 UTC 版)
「パイプライン演算子」の記事における「Haskell」の解説
Haskellにおけるパイプライン演算子の使用例である。Haskellでは&を使用する。 result = 100 & function1 & function2
※この「Haskell」の解説は、「パイプライン演算子」の解説の一部です。
「Haskell」を含む「パイプライン演算子」の記事については、「パイプライン演算子」の概要を参照ください。
固有名詞の分類
- Haskellのページへのリンク