tak0kadaの何でもノート

発声練習、生存確認用。

医学関連は 医学ノート

「Learn You a Haskell for Great Good!」第0章を読んだ

研究室でHaskell勉強会に参加しています。メンバーの都合で開催日が1ヶ月に1回とかになりがちで覚えられなくなってきたのでメモを残します(^_^;)。テキストはすごいHaskellたのしく学ぼうです。learnyouahaskell.comに原書のオンライン板があるのでそれも見ながらやってみる。

About this tutorial

ハスケルは楽しいって書いてある。以上。

So, what's Haskell

自分の視界に入ってくる言語を分類してみる。
(Pythonしかまともに読み書きできないから幅を広げ中。マサカリが飛んできそうで怖い)

言語 特徴
関数型プログラミング言語 HaskellOCamlLispClosureErlang 定義をプログラムする。※副作用がない。
命令形プログラミング言語 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のヘルプが見られる。

ソースコードのコメントの書き方

コメントアウトの方法

-- コメント
{-
改行もできる
-}