Scheme修行の11章を読む前に

Scheme手習いを読み終わったのでScheme修行を読みます。
本文の前に

  • 訳者前書き
  • 序文
  • はじめに

があるのでまずは気になったところのメモと感想など書きます。

訳者前書き

メモ
  • Scheme手習いと同じ著者による続編
  • 2冊合わせてSchemeの入門書として完結
    • なのでScheme手習いの続き、11章から始まっている
  • Scheme手習いと同じく質問と答えのペア
  • 前作は「再帰的」な考え方、今回は継続と代入
  • 他の言語にも継続に似た機能はある
    • Lispの例外(catch throw)やCのsetjump, longjump
    • 大域的な脱出手段なので後から使えない(のかな?)
    • Schemeの継続はいつでも使用することは可能
  • Scheme手習い・Scheme修行ではSchemeの制御構造については継続をのぞいては触れられていない
    • 末尾再帰最適化の話とか
      • Schemeは静的束縛なのでそれが実現出来るらしい
      • 動的な束縛をする言語では実現出来ない
      • 似たような言語だからといってLispで同じことをやるとスタックが溢れる
  • letccを実現するためにletccを使っているので本書で作成しているインタプリタSchemeでしか実現出来ない
  • 継続渡しスタイルについて調べてみるのも面白い
感想

スタックの話でもあったけどSchemeLispの方言とは言うがLispとは別物のよう。
Lispによって変数のスコープも違えば言語で規定されてる機能も全然違いそう。
継続渡しスタイルについては後でhttp://karetta.jp/book-node/gauche-hacks/007565を読もうと思う。
ということはSchemeじゃないLispにはSchemeにない機能もあるに違いないので読み終わったら取り組む。
実はPractical CommonLisp読んでる途中でやめちゃいましたので。

序文

メモ
  • 「もし誰かに魚をあげたら、一日食べることができる。もし誰かに釣りを教えたら、一生食べることができる。」
  • Lispは元々「LISt Processor」、リスト処理
  • Lispはリストだけでなく計算を行う関数を持っている。リストはLispの心臓、関数は魂。
  • 生きるためには食べ物以外のものも必要。釣りを習いましょう!
感想

リストが心臓で関数が魂ってなんかアツい!
確かにLispにはどっちも欠かせない気がする。
リストが心臓で関数が魂なら、マクロは一体なんだろう?
序文の最初に出て来る言葉は深い。
ググってみたけど中国のことわざ?元ネタが分からないです orz

はじめに

メモ
  • 「この本の目的は、読者に計算の性質について考えることを教えることにある。」
  • プログラミング言語は、計算の性質を伝える最も良い方法、数学と違い直接体験出来る
  • プログラミングの実用的な世界への入門書ではないが、計算の性質を理解する出発点
  • ガイドライン
    • 急いで読んではだめ。5回未満で読み切ろうとしないこと。(ちなみにScheme手習いには2回未満で読み切ろうとしないこと、と書いてる)
    • 飛ばして後ろから読んではだめ。少しずつ難しくなっていくので完全に理解してから進む。
    • 「読みながら例を試してほしい」
    • 「この本では形式的な定義はしない。読者が自分の定義を形式化し、覚えて理解するほうがよいと信じているからである」
    • しかし戒律はその先を読む前に知って理解しておくこと。
    • プログラミングのこつはデータおよび処理のパターンを認識すること。
感想

最後に「次のページで読者を待っている挑戦を楽しんでほしい。」と書いていた。なので、Scheme修行も楽しみながら読むぞ!
ガイドラインに書かれていたように、本にちりばめられたヒントから自分の定義を形式化し、覚え、理解したい。
ちりばめられたヒントを拾うためにも5回ぐらい読まないと気づかない点があるんだと思う。
計算の性質について考えれば、一生プログラマで食べていくこと、出来るかな?