HOP 9.4.1は連立方程式を制約システムで

久しぶりというか、ちょこちょこ読んでいるのだけどなかなか進まない。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5976円 ( 2005-03-28 )


写経してみたけど、また戻ってきそうな予感。

制約システムで連立方程式を解く。

今年は本をよく読んだ気がする

SICPからHOPへのコンボがperlを扱う上でとても役立った。

ProductName 計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン
ピアソンエデュケーション / 4830円 ( 2000-02 )


特にHOPは値段以上の価値があったと思ってるので満足。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5976円 ( 2005-03-28 )


そしてMAWP

ProductName Mastering Algorithms With Perl
Jon Orwant
Oreilly & Associates Inc / 2716円 ( 1999-07 )


来年もこの調子で。あと、もっとコードを書く。

ひとまずHOPは終了

9.4以降はlinogramの話なんだけど。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )


流して読んだら、最後の締めで、今までのチャプターのテクニックを総動員して書くとエレガントにかけるんだぜ的なことが書いてあって、まぁそうだろうなと思うんだけど、全写経してから、コードを眺めながら本を読まないと面白さが伝わりそうになかったわりに、写経する気力がちょっとない。

というわけで、気が向いたらまた読むことにした。

6章の無限ストリームと8章のParserが特に面白かったな。

Test::WWW::Declare

つくるぶガイドブログ: Test::WWW::Declareで宣言的にWebアプリをテストというエントリを読んだ。

ちょうど今Higher-order perlの9章declarative programmingのとこを読んでいてタイミングがよいので後で、ソースを読んでおこう。

HOP 9.2はLocal Propagation Network

引越しもだんだんと落ち着いてきたので、Higher-order Perlを再開。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )


9.2はLocal Propagation Network

華氏を摂氏にしたりケルビンに変換するのってどれかひとつが決まればあとは自動的に決定されるわけだが、f2cとかc2fといった変換用のサブルーチンを書かずにネットワークとして表現することで、どちらか一方を決めれば残りが自動的に決まるようにする。

HOP 8章終了

消化できていないところもあるけど一通り読み終わった。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )


  • Parser
  • Lexer
  • 再帰下降parser
  • 左再帰、右再帰
  • バックトラッキング
  • continuation,継続

サンプルのコードで端折ってる部分がいきなり多くなってて動かすのに苦労するとこが少し見受けられた。継続とかもう少し厚いと嬉しかったけど、それでも本書でもっとも分厚い章。

HOP 8.8はバックトラッキング

継続(8.8.1)使ってやる方法と、パーサ自体に押し込む(8.8.2)方法がある。 SICPのambのところを後でもう一度読んでおく。

ProductName 計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン
ピアソンエデュケーション / 4830円 ( 2000-02 )


なんていうかまだ継続をきちんと理解していないことが理解できた。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )


HOP 8.4終了

8.3と8.4はほぼセット。8.4だけで40page越えなので読み応えがあるし、ちょっと疲れた。

算術的な表現(四則演算)のための字句解析器や構文解析器をperlで実装するわけだが、リスト表現って強力だと。

あとleft recursionを無限ストリームにしていくとことか凄い。

HOP 8.2

Higher-Order Perl 8章

地道に理解しながら。

my $parser = make_parser_for_grammer 'expression',
  {
   expression => [['INT', '+', 'expression'],
          ['INT', '*', 'expression'],
          ['(', 'expression', ')'],
          ['INT'],
          ],
   },
  ['(', 'INT', '*', '(', 'INT', '+', 'INT', ')', ')']
  ;

$childrenの$productionの@childをprint

INT,+,expression
INT,*,expression
(,expression,)
INT

##
(,INT,+,expression,)
(,INT,*,expression,)
(,(,expression,),)
(,INT,)

##
(,INT,*,INT,+,expression,)
(,INT,*,INT,*,expression,)
(,INT,*,(,expression,),)
(,INT,*,INT,)

##
(,INT,*,(,INT,+,expression,),)
(,INT,*,(,INT,*,expression,),)
(,INT,*,(,(,expression,),),)
(,INT,*,(,INT,),)

##
(,INT,*,(,INT,+,INT,+,expression,),)
(,INT,*,(,INT,+,INT,*,expression,),)
(,INT,*,(,INT,+,(,expression,),),)
(,INT,*,(,INT,+,INT,),)

childrenでとりあえずgrammarから生成できる子を生成しといてis_interestingでフィルタリング(DFS)

ProductName Higher-order Perl: A Guide To Program Transformation
Mark Jason Dominus
Morgan Kaufmann Pub / ¥ 7,588 (2005-05-30)
通常24時間以内に発送

8章から突然難易度が上がる気がする。

EmacsのPDB編集モード

Higher-order Perl 8章: Parser

HOPの8.2はatomとかsymbolがでてくる。これはlispで探すとわかりやすい説明がでてくるかなとググってみたら、

pdb.elっていうPDBのフォーマットを編集するEmacsのモードがヒットした。

Atom(原子)にシンボルか、確かに、、、、と妙に納得した。

ProductName Emacs 辞典 (DESKTOP REFERENCE)
佐藤 竜一
翔泳社 / ¥ 3,129 (2006-05-11)
通常24時間以内に発送

elispはEmacs辞典が簡単にまとまっていてわかりやすい。S式とかAtomとか読み返したらちょっとわかった気がした。