継続(8.8.1)使ってやる方法と、パーサ自体に押し込む(8.8.2)方法がある。 SICPのambのところを後でもう一度読んでおく。
なんていうかまだ継続をきちんと理解していないことが理解できた。
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )
継続(8.8.1)使ってやる方法と、パーサ自体に押し込む(8.8.2)方法がある。 SICPのambのところを後でもう一度読んでおく。
なんていうかまだ継続をきちんと理解していないことが理解できた。
8.3と8.4はほぼセット。8.4だけで40page越えなので読み応えがあるし、ちょっと疲れた。
算術的な表現(四則演算)のための字句解析器や構文解析器をperlで実装するわけだが、リスト表現って強力だと。
あとleft recursionを無限ストリームにしていくとことか凄い。
WebService::Audioscrobblerってのがあるんだけど、Artist,Track,Tagにしか対応してないのでAlbumにも対応させてみた。
WebService-Audioscrobbler-wAlbum.tar.gz
use WebService::Audioscrobbler;
my $ws = WebService::Audioscrobbler->new;
my $user = $ws->user('kzfm');
my @albums = $user->albums;
for my $album (@albums) {
print $album->name . ":". $album->asin . "\n" if defined $album->asin;
}
さて実行
$ perl wa.pl
Bricolage:B000003S7Y
Hospital Mix 4:B0006ULVZW
Think Tank:B0000931OG
Bass Is Maternal:B00004T90L
Tally Ho!:B00000D9VK
Emperor Tomato Ketchup:B000002HK2
Sweetbox:B00000AFYM
Bodily Functions:B00005B9JQ
Hand on the Torch:B000005HB8
Supergrass:B00004S95F
Temperamental:B00001QENY
Inside Life:B0000046KU
Lifeforms (disc 2):B000003RVR
Night Food:B0000677MF
Hail to the Thief:B000092ZYX
My Point of View:B0009XE874
The Understanding:B0009RQRP6
On:B000002BCA
Amnesiac:B00005B4GU
無罪モラトリアム:B00000JD1I
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)
8章から突然難易度が上がる気がする。
HOPの8章がなかなかすすまん。3歩進んで2.5歩下がるというようなことを繰り返しているような。
8.1.1に出てくるquotemetaはメタ文字をクゥオートする組み込み関数
pirl @> quotemeta($/)
"\\\n"
と展開される。
この節は、ダイヤモンド演算子をエミュレートしつつ、更に$/の部分に正規表現を使えるようにするといった内容
last.fmの自分のアルバムチャート
use XML::Simple;
use LWP::Simple;
use XXX;
my $uri = 'http://ws.audioscrobbler.com/1.0/user/kzfm/topalbums.xml?type=3month';
my $response = LWP::Simple::get($uri);
if ($response){
my $xml = XML::Simple->new->XMLin($response);
XXX $xml;
}
29092007 perl
gオプションをつけておけばposという組み込み関数が使える
pirl @> $text = "abcde"
"abcde"
pirl @> pos($text) if $text =~ /c/
undef
pirl @> pos($text) if $text =~ /c/g
3
といまさらながら知った。
29092007 perl
今週は仕事がやたらと忙しかったり、送別だ歓迎だと飲みが重なったので思うように読みすすめられなかったが、7章はページ数が少ないのでなんとか読み終えた。
perlで高階関数をどうやるかって章。
クロージャを使ってカリー化するんだがそれだと関数っぽく呼べないのでglobを使う。というようなテクニカルな部分に関して解説。プロトタイプ宣言の部分とか良くわからなかったが、中盤以降あまり興味が持てなかったのでちゃんと読んでないような。
ちなみに、perlでカリー化するモジュールはSub::Curryってのがあります。
http://www.kzfmix.com/blosxom_archive/Computer/Linux/fpython060914.html