Drkcore

13 11 2011 Scheme Tweet

ホップ、スキップ、ジャンプ (schemeで継続)

scheme 修行では早々に継続(letcc)が出てくる。

(define rember-upto-last
  (lambda (a lat)
    (let/cc skip
       (letrec
           ((R (lambda (lat)
             (cond
              ((null? lat) (quote ()))
              ((eq? (car lat) a)
               (skip (R (cdr lat))))
              (else (cons (car lat)
                  (R (cdr lat))))))))
         (R lat)))))

これはリストの中の指定した要素以降のリストを返す(要素が見つからなければすべてのリストを返す)

gosh> (rember-upto-last 'three '(one two three four five))
(four five)

なんでも継続によれば継続とは

「現在の計算を続行するための情報」

とある。つまりこれが継続ということだが、Scheme修行では別の表現がされていた(p.43)

letcc hopを通り過ぎたあと、(hop M)に遭遇する前にすべきだったことを忘れなさい。そしてMが何であっても まるで (letcc hop M)の値を求めたかのようにふるまいなさい

上のコードでは、skip (R (cdr lat))を通るときに今まで計算してきた情報を捨てて、(R (cdr lat))を実行する。つまり現在の計算を続行するための情報 を伴ってRにジャンプしている。

ProductName Scheme修行
Daniel P. Friedman and Matthias Felleisen
オーム社 / 2940円 ( 2011-06-15 )


About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021