Skip to content

Instantly share code, notes, and snippets.

@wecing
Last active December 15, 2015 15:09
Show Gist options
  • Save wecing/5279846 to your computer and use it in GitHub Desktop.
Save wecing/5279846 to your computer and use it in GitHub Desktop.
the call/cc "yin-yang" puzzle's execution expanded
(let* ((yin
((lambda (cc) (display #\@) cc) (call-with-current-continuation (lambda (c) c))))
(yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(yin yang))
snapshot A:
(let* ((yin
((lambda (cc) (display #\@) cc) _))
(yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(yin yang))
@
(let* ((yin A)
(yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(yin yang))
(let* ((yin A)
(yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(yin yang))
which is the same as:
(let ((yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(A yang))
snapshot B:
(let ((yang
((lambda (cc) (display #\*) cc) _)))
(A yang))
*
(let ((yang B))
(A yang))
(A B)
(let* ((yin
((lambda (cc) (display #\@) cc) B))
(yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(yin yang))
@
(let ([yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))])
(B yang))
snapshot B':
(let ([yang
((lambda (cc) (display #\*) cc) _)])
(B yang))
*
(B B')
(let ((yang
((lambda (cc) (display #\*) cc) B')))
(A yang))
*
(A B')
(let* ((yin
((lambda (cc) (display #\@) cc) B'))
(yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(yin yang))
@
(let ((yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(B' yang))
snapshot B'':
(let ((yang
((lambda (cc) (display #\*) cc) _)))
(B' yang))
*
(B' B'')
(let ([yang
((lambda (cc) (display #\*) cc) B'')])
(B yang))
*
(B B'')
(let ((yang
((lambda (cc) (display #\*) cc) B'')))
(A yang))
*
(A B'')
(let* ((yin
((lambda (cc) (display #\@) cc) B''))
(yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(yin yang))
@
(let* ((yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(B'' yang))
snapshot B''':
(let* ((yang
((lambda (cc) (display #\*) cc) _)))
(B'' yang))
*
(B'' B''')
...
what. the. f******. a******.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment