Scheme修行13章
letcc - /var/log/messages
フライングされていたので早速13章を読みました。1度読んで2度目読む前にプログラミングGaucheの継続の章を斜め読みしたらちょっとすっきりしました。
その後バスの中でもう一度読んでソースコード書きながら読んで、再度メモを確認しつつ軽く読んだのでエントリを書きます。
letccについて
call-with-current-continuation、その略のcall/cc、継続の事です。
Scheme 修行 - /var/log/messages
を参考にgaucheのマニュアルのletccの項目Gauche ユーザリファレンス: 手続きと継続を読むと
(let/cc var body…)が(call/cc (lambda (var) body …))に展開されると書いてあります。
なのでlet/ccを使うことにしました。
メモ書き
- (hop M)に遭遇する前にすべきことだった事を全て忘れて(letcc hop M)の値を求めたかのように振る舞う
- (letcc hop ( (hop)を呼び出すまでの色々な手続き ) M)の色々な手続きを全部忘れてMのところまでジャンプすると考えちゃってもいいのかな
- hopと唱えて、結果と一緒に正しい場所へ
- 第14の戒律「(letcc ...)を用いて、値を直ちに、すばやく返すべし。」
- どこかで覚えてた計算を忘れる
- intersectallとrember-upto-lastで違うとこ
- consが結果を待ってるはずなのにconsしないでskipしてたり色々と面白い。
- 結果をまたずに抜け出すとき、必要のない部分を捨てるときに使うと便利っぽい
- 計算途中だった値はどこへいっちゃうんだろ
- 継続についてはもうちょっと別の本やウェブサイト読まないと完全には理解出来てなさそうな感じがする
間違いかな?と思ったもの
- p45の(null? (cdr lset))の質問の答えは真じゃないかな?
- p49とp50のJの中のcondのmember?とelse?の結果の式は反対じゃないかな。