第99回 素人くさいSICP読書会(at コントロールプラス株式会社)

  • 会場提供&紅茶ありがとうございました
  • 直前にスタバで復習してたんで、いきなりhisaさんと内容の話とか始めてしまった
  • 問題4.5
  • 「=>」の使いどころ。Cみたいな書き方とか
  • 自分は割と関数の返り値をそのまま真偽判定に使うのが好きだったりする
  • を返す関数だと真と判定されるんでやな感じ
  • パイプに似てる?(ききょうさん)→メソッドチェーンみたいにつないでいくことはできない
  • 自分の(ダメ)思考の過程
    • cond-actionsを書き換えればいいんじゃね
    • →predicate部を使い回さないといけないんでダメ
    • →expand-clausesを書き換えないと
    • →make-ifの中で分岐させようとする
    • →predicate部を使い回さないといけないんでやっぱりダメ(わかってない)。再帰で追加するものを変えないと
    • →letで値を取っておこうとする
    • →letはメタ言語側なんで、導出された式の中では意味がない
    • →lambdaは使えるので、lambdaの形に展開すればいい
    • →もしかして問題4.6が先にあればいいということ?
    • SICP神的には4.5で簡単な展開をやって4.6できちんと展開という流れか?
    • →とりあえずlambdaで展開する形に書いた。これ
    • →lambdaの仮引数のところで名前の競合の問題があるんじゃね?(by hisaさん)
    • →言語処理系としては結構致命的かも(このエントリの問題点に似てる)
    • →(CLやGaucheには、アクセスできないシンボルを作るgensymっていう機能があるらしい。でもSICPで使うわけにはいかんし)
    • →(Gaucheではどうやってるかみんなでソースコードを見てみたり→よくわかんね)
    • →そもそも導出された式の形でやろうとしたのが間違いでは?
    • →eval-condってのを直書きすればいんじゃね?
    • →書いてる途中 ←イマココ
  • 問題4.6
  • mapを使うということはすぐわかるんだけど
  • 217ページの注に「高階関数は使わない」と書いてある
  • サスマン先生は、高階関数を持たない言語でもメタ言語として使えることを示したかったらしい
  • ということで特にmapを使っても問題ないみたい
  • この問題は宿題扱いということでいいよね?
  • メタ言語」と「開発する言語」の切り分けがようやく感覚的にわかりかけてきた
  • ある言語でその言語自体の処理系を記述するのは、メタの視点を鍛えるいいトレーニングになると思った