読者です 読者をやめる 読者になる 読者になる

BlogIsHowMuch

鑑賞した作品のレビューやプログラミング系のネタをダラダラ書いていくだけのブログ

Haskellを学んでみた

ロゴ

f:id:HowMuch:20150426151551p:plain

 

無名関数でよく使われるラムダをモチーフにデザインされていますね。

歴史

1985年、遅延関数言語である Miranda がリサーチ・ソフトウェア社によって発表された。1987年にはこのような非正格な純粋関数型プログラミング言語が十二以上存在していたが、そのうち最も広く使われていた Mirandaパブリックドメインではなかった。オレゴン州ポートランドで開催された Functional Programming Languages and Computer Architecture (FPCA '87) において開かれた会議中に、遅延関数型言語のオープンな標準を作成するための委員会が発足されるべき、という強い合意が参加者のあいだで形成された。委員会の目的は、関数型言語のデザインにおける将来の研究のための基礎として役立つ共通のものへと、既存の関数型言語を統合することであった。

wikipediaより引用

特徴

  • 遅延評価
  • 型推論
  • 代数的データ型
  • 無名関数
  • 関数のカリー化と部分適用
  • パターンマッチ
  • リストとリスト内包表記
  • 型クラスとインスタンス
  • 入出力

wikipediaより引用

学んだサイト

学んでみて

 最初の印象はへんてこな構文をもった頭のおかしい言語って感じです笑。

 でも、階乗を求める再帰関数を読んで憑りつかれつつあります。

fact 0 = 1

fact n = n * fact (n - 1)

まさかこれだけのシンプルさで階乗を表現できるとは!私は物事に対してシンプルさを求める質なのでこの二行で一気にHaskellに引き込まれました!

 他にも変数は代入ではなく束縛という概念によって縛られているので、変数に再代入はすることはできません。一見すると煩わしいルールのようにも感じますが、 おかげで副作用によるバグを格段に減らせデバッグも容易になります。

 遅延評価のおかげで、一見エラーが出るような処理も行うことができるし、無限長のリストなんかも扱うことができるので自分の中で大きな革命が起きました。

answer = const 42 (1 `div` 0)

上の文のようなプログラムを他の言語で実行してしまうと(1 'div' 0)の部分が先に評価されてしまいエラーが出てしまいます。 しかし、Haskellでは遅延評価のおかげで(1 'div' 0)は必要なときまで評価されません。つまり、この文ではエラーを出すことなく42という値を返すことができるのです。

 面白くて、シンプルで、本当にいい言語だとは思うのですが、いまいち実践で使おうとすると躊躇してしまう言語ではありますね(^ ^;) それだけ私がオブジェクト指向に慣れ過ぎてしまったのかもしれません。モナドとか使えばオブジェクト指向っぽく書けるみたいですけどね。 慣れてくれば、世界が広がる気がするのでもう少し辛抱して習得に励んでみようと思える言語でした!