Haskell

"Write Yourself a Scheme in 48 Hours/Parsing" http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing を読む

Parsingの後半の練習問題を解く。 Excercise 3 Instead of using the try combinator, left-factor the grammar so that the common subsequence is its own parser. リストもしくはドットリストをパースするところは、tryコンビネータを使って do char '(' …

"Write Yourself a Scheme in 48 Hours/Parsing" の後半を読む

Recursive Parsers: Adding lists, dotted lists, and quoted datums ということで、"Parsing"の章の前半では、AtomやStringなどのパースをやったが、 後半ではリストなど繰り返しのある構文のパースをする。ここではsepByという関数がでてくる。 http://leg…

"Write Yourself a Scheme in 48 Hours/Parsing" http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing を読む

Parsingの練習問題の続き。 Excercise 2 support escaping of internal quotes (続き) many (noneOf "\"") の部分は、このままだと、「"」が来たら止まって、それまで読んだところを文字列で返すような感じになっている。 で、「abc"def"g」 だったら、(「ab…

"Write Yourself a Scheme in 48 Hours/Parsing" http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing を読む

これは面白い。 Excercise 2 support escaping of internal quotes ということで、Stringのパースのとこで "ab\"c" -> ['a','b','"','c']のようなエスケープをサポートしろという問題。 最初は以下のようになっている。 parseString :: Parser LispVal parse…

The Haskell Programmer’s Guide to the IO Monad ― Don’t Panic ― http://stefan-klinger.de/pub.xhtml

4.3 Functors in Haskell List やMaybeがFunctorになるという話。Fがfunctorのとき、objectsからobjectsへのmapをFo、 morphismsからmorphismsへのmapをFmとする。 unaryであるType Constructor Ft、つまり(List a)とか(Maybe a)のように (* -> *)になってる…

The Haskell Programmer’s Guide to the IO Monad ― Don’t Panic ― http://stefan-klinger.de/pub.xhtml

3.2 Spot a category in Haskell Haskell全体を扱うのではなく、objectsとmorphismsのように振舞う箇所だけを扱う。 カリー化とかexponentialの話もここではしない。ということで、objectは型の一部。kindが(* -> *)とかでなく(*)な型だけをobjectとする。だ…

The Haskell Programmer’s Guide to the IO Monad ― Don’t Panic ― http://stefan-klinger.de/pub.xhtml

ErlangでなくHaskellで書こうという雰囲気が強まってきた。でHaskellで書くにはいくつか壁を突破しなくてはならない。 ということでまずはモナド。 Haskellのモナドの解説には、カテゴリ理論よりのものと、プログラミング手法としてのみ扱ってカテゴリ理論に…

"Programming with Arrows"の、2.1 Arrows and pairsを読む。 最初にあらすじを。 2.1では、Arrowクラスのメソッドとして、 まず(&&&)を導入して、その後、よりプリミティブな演算子 (***)を導入する。((***)を使えば、(&&&)は簡単に作ることができる。) …

今日もやっぱり、 "Programming with Arrows" http://www.cs.chalmers.se/~rjmh/afp-arrows.pdf の続き。 1.2 The Arrow class の後半で、前半で定義したArrow classを使った例として、 tream Function(SF)を定義してみる。SFの中身は、[a] ->[b]なので、リ…

"Programming with Arrows" http://www.cs.chalmers.se/~rjmh/afp-arrows.pdf の昨日の続き。1.2 The Arrow class関数の結合と、Kleisli Arrows の結合、両方ができたので、 Arrow をclassにして、統合しようと。そのために、type Kleisli を newtypeで定義…

"Programming with Arrows" http://www.cs.chalmers.se/~rjmh/afp-arrows.pdfの1.1 Pointfree programming のところを読む。 ポイントフリープログラミングは、パイプでつなげるような感じで、 自然にコンポーネントを組み立てるようにプログラミングができ…

3D computer games and functional programing http://www.cse.unsw.edu.au/~pls/thesis/munc-thesis.pdfHOpenGLとYampaを使ってFPSを作るという内容。