[[プログラミング]] *Haskell [#qe34fb41] #contents ---- **Programming in Haskell [#jfaa53b7] -Graham Hutton著の「Programming in Haskell」や参考リンクのスライドに関するメモ。 --ちなみにオーム社から翻訳版として「Haskellプログラミング」というタイトルで出版されている。 ***第1章 導入 (Introduction) [#g4112448] - ***第2章 はじめの一歩 (First Steps) [#hc13dafd] - ***第3章 型とクラス (Types and classes) [#e28d8b9a] ***第4章 関数定義 (Defining functions) [#y4b4b199] ***第5章 リスト内包表記 (List comprehensions) [#rf740073] ***第6章 再帰関数 (Recursive functions) [#w0d93fa7] ***第7章 高階関数 (Higher-order functions) [#o0ebd248] ***第8章 関数型パーサー (Functional parsers) [#y6012088] ***第9章 対話プログラム (Interactive programs) [#pf099b05] ***第10章 型とクラスの定義 (Declaring types and classes) [#o7aa1d34] ***第11章 切符番号遊び (The countdown problem) [#o956c676] ***第12章 遅延評価 (Lazy evaluation) [#gd52ef8a] ***第13章 プログラムの論証 (Reasoning about programs) [#bb50e0f7] **ふつうのHaskellプログラミング [#s1d34753] -青木峰郎著の「ふつうのHaskellプログラミング」に関するメモ。 ***第1章 [#ia9acaad] -高階関数 --引数や戻り値として関数を取る関数。 -多相型(polymorphic type) --型変数を含む型のこと --Javaでいう総称型(generic type)、C++とかではtemplate -遅延評価 --式を評価する方式の一つ。最初に数値(引数)の評価では無く、関数の評価を行う。Haskellは遅延評価を基本としている。 ***第2章 [#c05a3326] -mainアクション --Haskellでは実行するとmainアクションの評価が始まる。 -関数の適用 --以下におなじみの"Hello, World!"のHaskellでの例を示す。Haskellでは、"Hello, World!"に関数putStrLnを適用する(apply)と言い、そのアクションを評価することにより、Hello, Worldが表示される。 main = putStrLn "Hello, World!" --ちなみに""中にエスケープシーケンスも代入可能。 -レイアウト --do文等に記述される後続の複数のアクションは同一のインデントでなければならない。 --Javaでいうブロック構文 --別名、オフサイドルール(off-side rule)と言う。 -$演算子 --関数の戻り値を新たに関数の引数として利用するなど、複数の関数を連続して書きたい場合、従来の言語では括弧のネストが見づらかったが、$演算子を用いることにより、スマートに記述が可能。 f (g ( h "Hello, World!")) f $ g $ h "Hello, World!" ***第3章 [#n0816b65] **環境設定 [#lfb9b429] ***Haskell mode (emacs) [#u31ea315] -Hasklellプログラミングをemacsでする為に、Haskell modeが存在する。 -以下のリンクから最新版のアーカイブをダウンロードし、適当な場所に解凍する(e.g. ~/share/emacs/site-lisp/haskell-mode-*.*.*/) --http://projects.haskell.org/haskellmode-emacs/ -~/.emacsに以下の記述を追加する。 ;; haskell (load "~/share/emacs/site-lisp/haskell-mode-*.*.*/haskell-site-file") (setq haskell-program-name "/usr/bin/ghci") --標準ではインタプリタとしてHugs 98が指定されているので、ghciを使用したいときにhaskell-program-nameを指定する。 -サブウィンドウでインタプリタを起動する M-x run-haskell -編集しているプログラムをインタプリタでロードする C-c C-l **参考リンク [#v1460dec] --http://www.cs.nott.ac.uk/~gmh/book.html