«前の日記(2017-03-04) 最新 次の日記(2017-03-07)» 編集

ɥozɐʞıɥ


2017-03-05 終日仕事 [長年日記]

_ [Lisp] Schemeの継続を理解しようとしている

大域脱出はまぁいいかと置いておいて<ヲイ
Generatorはcall/ccなしだと
 (define (test)
  (let ((i 0))
    (lambda()
      (set! i (+ i 1))
      i)))
 
とすると
 gosh> (define a (test))
 a
 gosh> (a)
 1
 gosh> (a) 
 2
 gosh> (a)
 3
 
では継続を使うと…
 (define *cont* #f)
 (define (test)
  (let ((i 0))
    (call/cc (lambda(c)(set! *cont* c)))
   ;-- 継続はここから
    (set! i (+ i 1))
    i))
 
 gosh> (define a test)
 a
 gosh> (a)
 1
 gosh> (a)
 1
 gosh> (*cont*)
 2
 gosh> (*cont*)
 3
 gosh> (test)
 1
 gosh> (*cont*)
 2
です。 viaContinuation - Wikipedia 継続も関数同様にfirst classなんですな。


2002|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|
«前の日記(2017-03-04) 最新 次の日記(2017-03-07)» 編集