研究室でHaskell勉強会に参加しています。メンバーの都合で開催日が1ヶ月に1回とかになりがちで覚えられなくなってきたのでメモを残します(^_^;)。テキストはすごいHaskellたのしく学ぼうです。learnyouahaskell.comに原書のオンライン板があるのでそれも見ながらやってみる。
About this tutorial
ハスケルは楽しいって書いてある。以上。
So, what's Haskell
自分の視界に入ってくる言語を分類してみる。
(Pythonしかまともに読み書きできないから幅を広げ中。マサカリが飛んできそうで怖い)
言語 | 例 | 特徴 |
---|---|---|
関数型プログラミング言語 | Haskell、OCaml、Lisp、Closure、Erlang | 定義をプログラムする。※副作用がない。 |
命令形プログラミング言語 | Python、R、C、C++、Fortran、etc | 作業工程をプログラムする |
Closureはあんちべ!さんが連呼してたのですが「R」並みに検索しづらいので公式ページへのリンクを貼って貢献します(笑)
副作用、参照透過性
副作用とは変数の破壊的代入などでコンピュータの状態が変化する作用のことで、例えばPythonならa = [1, 2, 3]
、a.sort()
とするとaの値が変化する。(純粋)関数型プログラミングにはこのような副作用が無く参照透過性があるのでバグは作りこみにくい(結局プログラマ依存だと思うけど)。遅延評価
値の計算をプログラムの上から順番に行うのではなく、最終的に値を表示しないといけなくなって初めて計算すること。この性質があるので例えば無限リストを作ったりできる。静的型付け
プログラムのコンパイル時(つまりプログラムが実行される前)に変数の型が決まっている性質。エレガントで簡潔
Pythonだってエレガントだぜ
必要なもの
GHCが必要。Haskell PlatformはGHCとライブラリがセットになっているからそれをインストール。haskell.org/platform/に行って説明を読んだらOK。
(2014/8/14追記: Haskell Platformは依存関係の関係でイマイチらしいのでcabal使おう。)
使い方
:l mymodule.hs --モジュールのロード :r --再ロード
起動時に読み込むには
ghci myfunction.hs
オブジェクトの型を見る
:t object
あとは:q(uit)
とか。:?
でGHCiのヘルプが見られる。
ソースコードのコメントの書き方
コメントアウトの方法
-- コメント {- 改行もできる -}