/var/log/messages

2011-06-19

[] Scheme 修行

letcc なるナニが出てきてます。

$ gosh
gosh> letcc
*** ERROR: unbound variable: letcc
Stack Trace:
_______________________________________
gosh> 

当たり前ですが無い。テキストの 41p に以下なコードが例示されてます。以下なカンジ。

(define intersectall
  (lambda (lset)
    (letcc hop
      (letrec
        ((A (lambda (lset)

scheme な書き方は以下らしい。

(define intersectall
  (lambda (lset)
    (call-with-current-continuation
      (lambda (hop)
        (letrec
          ((A (lambda (lset)

これはマクロで云々、なのかな。おそらくその内 @hanachin_ の中の人でっち上げるのだろうと思いますが以下かなぁ。

(define-syntax letcc
  (syntax-rules ()
    ((_ arg ...)
     (call-with-current-continuation (lambda (arg) ...)))))

とは言え、Scheme 手習いを再読した方が良いのは間違い無いはず。

valvallowvalvallow 2011/06/20 11:44 gaucheにはletcc相当のlet/ccがあるそうですよ。

Gauche ユーザリファレンス: 6.17 制御
http://practical-scheme.net/gauche/man/gauche-refj_55.html#index-let_002fcc

yamanetoshiyamanetoshi 2011/06/20 12:02 ほほー、確かにありますね。。
フォローありがとうございました!

SaitoAtsushiSaitoAtsushi 2011/06/20 23:29 記事と直接の関係はないことなので恐縮ですが、 Gauche のマニュアルは改訂があった場合等に URL (ファイル名) と内容の対応付けが変わる場合があります。
より便利な以下の形式が用意されているので活用してみてはいかがでしょう。
http://practical-scheme.net/gauche/man/?l=jp&p=let/cc
もちろん、ここで let/cc とした箇所を他の構文や関数の名前にしても一発でその項目へ飛べます。

yamanetoshiyamanetoshi 2011/06/20 23:39 Gauche に大変お世話になっておりながら、あまりこうしたソレを踏まえておらず、申し訳ありません。参考にさせて頂きます。
ご指摘、本当にありがとうございます。

トラックバック - http://d.hatena.ne.jp/yamanetoshi/20110619/1308477975