Skip to content

Instantly share code, notes, and snippets.

@yamasushi
Last active December 17, 2015 01:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yamasushi/5530972 to your computer and use it in GitHub Desktop.
Save yamasushi/5530972 to your computer and use it in GitHub Desktop.
>gosh /home/shuji/gauche/debug/test.scm
#?="/home/shuji/gauche/debug/test.scm":28:(rp-dict)
#?- "hoge"
(1)#?="/home/shuji/gauche/debug/test.scm":30:(rp-dict)
#?- "hoge"
#?="/home/shuji/gauche/debug/test.scm":34:(rp-dict)
#?- "hoge"
*** ERROR: attempt to return from a ghost continuation.
Stack Trace:
_______________________________________
0 (write obj)
At line 35 of "/home/shuji/gauche/debug/test.scm"
(use gauche.generator)
(use gauche.parameter)
(define rp-dict (make-parameter #f))
(define (generator-generate proc)
(define next #f)
(define return #f)
(^[]
(let/cc break ;; break = generatorがcallされた後に相当する継続
(set! return break) ;; 環境を書き換え
(if (not next)
(begin
(proc (^x (let/cc cc (set! next cc) (return x) ) ) )
(return (eof-object)) )
(next) ) ;; yieldの後に待ち構えている継続をcall
)))
(let1 obj (generator-generate (^y (y 1) ) )
(parameterize ( [rp-dict "hoge" ] )
#?=(rp-dict)
(write (generator->list obj) ) (flush)
#?=(rp-dict) ) )
(let1 obj ($ generator->lseq $ generator-generate (^y (y 1) ) )
(parameterize ( [rp-dict "hoge" ] )
#?=(rp-dict)
(write obj ) (flush)
#?=(rp-dict) ) )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment