2007-10-04
■ [scheme] SXMLのあんまり好きでないところは
属性を「@」で表現するところだ。
(p (a (@ (href "index.html") (class "english")) "-> English page"))
例えば「属性は:から始める」とかの方が、シンプルで好きだな。
(p (a (:href "index.html") (:class "english") "-> English page"))
うーん、でもこれだと変な木構造になっちゃうか。
(p (a (@ href "index.html" class "english") "-> English page"))
こんなのはどうか。
…微妙だ。
■ [ruby] $<.any? で「標準入力から1行読み捨てる」という意味になるらしい
http://jarp.does.notwork.org/diary/200710a.html#200710031
なんでこれで「入力を1行おきに出力」になるんだぜ?
yhara@meteor:~/src % cat nums.txt 1 2 3 4 5 yhara@meteor:~/src % ruby -p -e '$<.any?' < nums.txt 1 3 5
できた!ふしぎ!
えーと、$<はARGFのことで、オプション-pだから、これは
ruby -e 'while(gets) do ARGF.any?; print $_; end
と一緒だろ。$_は「最後にgetsかreadlineで読み込んだ文字列」で…。
ああそうか、ARGFのany?メソッドを呼ぶと、内部でARGF.eachが呼ばれて、で最初の一行を読み込んでyieldしたところでany?がtrueを返すから、 結果的に「getsもreadlineも使わずに1行読み捨てる」が可能になるわけか。
なるほどなあ(笑)。
■ [scheme] GaucheでHTMLを操作する
htmlpragでhtmlからsxmlに変換するのがよさげ。
んで、sxml.ssaxとか sxml.sxpathで操作する。
(use file.util) (load "./htmlprag.scm") (define sxml (html->sxml (file->string "hoge.html"))) (display (length (sxml:child-nodes sxml)))
こんな感じか。
SSAXを使うと、「あるノードが見付かったとき」などのイベントに対するコールバックを定義する形でsxmlのパーサが書ける。
sxpathを使うと、CSSセレクタみたいに特定の条件を満たすノードだけを取り出したりできる。
使用例は IBM XMLの論考: SXMLとSSAXの調査が参考になりそう。