第163回 素人くさいSICP読書会(at 月島某所)

  • 会場提供ありがとうございました
  • お菓子&桃ごちそうさまでした
  • 参加者3人。月島最少記録?
  • ご自宅を貸していただいてるのに申し訳ないので、せめて月島のときはもうちょっと来てほしいなー
  • 5.2.1を音読しながらコードを読んだ
  • 今回は割と雑談が盛り上がった
  • hisaさんが「setが返すのは手続きでgetが返すのは値なのはそろってないのでgetでも手続きを返したい」とか
  • 大昔に出てきたfor-eachを忘れてた。mapと違って評価結果を捨てる。副作用が主な目的のときに使う
  • Ruby(1.8まで)のブロックのスコープが外に漏れてる件について
  • iとか使い回すだろJK、とか
  • Rubyではメソッドチェーンでつないでいくことが多いので一時変数はあまり使わないらしい
  • Pythonもダメ。LLでまともなブロックを持ってるのはPerlだけ(弾さん談)
  • JavaScriptのfunctionは内部にfunctionを書ける。というかローカルスコープを実現する手段がそれしかない
  • SchemeJavaScriptってほんとによく似てる
  • pushとpopに!を付けるかどうかからいろいろ脱線
  • Rubyの破壊的メソッドの!の付け方はいいかげん
  • Schemeの?はCommon Lispではp。ではSchemeの!はCommon Lispでは何?
  • elispのsetとsetq。setは関数だから第1引数をquoteする必要がある。いちいちquoteしなくても済むようにしたマクロがsetq=set quote。実際に使うのはsetq
  • Common Lispのsetfでは値を束縛するシンボルとして第1引数の評価結果を使う
  • リストのpush/popは頭だが、たいていのLLでは配列のpush/popは最後尾。計算量の問題
  • Rubyの<<の挙動はレシーバ依存
  • SRFIにスタックないかな → SRFIにはないがGaucheにはあるっぽい
  • Gaucheはpush!とpop!でちゃんと!が付いてる
  • Gaucheのpush!の第1引数でcdrを使うとリストの途中にpushされる
  • push!がcar部のセルとのつなぎ方を知ってる? なんかきもい
  • マニュアルの説明から、push!が知ってるのではなくcdrのsetterを使っているからこんな動作になることが判明
  • 結論としては、サスマン先生の基準は結構いいかげん
  • 日本語訳がひどい。特に「基本計算機」の1文目
  • コードを見てから本文に戻ると意味がわかる。コード万歳
  • 本文中の「もう一つ」の意味がわからない。英文に当たることで「メッセージパッシングのインタフェースに加えて関数のインタフェースも」という意味だと判明。日本語訳の「5.2節の先頭で示したような」の位置がひどい
  • pcには実際に命令列が入るので普通のプログラムカウンタとはちょっと違う
  • 某猫科の人がJavaXMLの人になってるという話からHTMLについて弾さんとひとしきり盛り上がる
  • 2重の無駄、とか。Javaでコードにオーバーヘッド、XMLでデータにオーバーヘッド
  • HTMLがSGMLを採用したのがそもそもの間違い。S式を知らなかった?
  • もっとWikiっぽい記法でよかった、とか。例えばliタグは昔は終了タグが不要だったとか(知らなかった)
  • 少なくとも終了タグに名前は不要。入れ子構造を守るならタグの対応は自明
  • <hr>と</hr>の間に何か書くとどうなるか
  • HTMLをいったんJavaScriptでDOM経由で読み込んで出力するときれいになって出てくる
  • 汚いままのHTMLをレンダリングしようとするとメモリリークおこしまくりだから、ブラウザは内部ではきれいな形で持ってる