Skip to content

Instantly share code, notes, and snippets.

@cormojs
Last active August 29, 2015 14:08
Show Gist options
  • Save cormojs/6d1fc4f14efd788eaf8c to your computer and use it in GitHub Desktop.
Save cormojs/6d1fc4f14efd788eaf8c to your computer and use it in GitHub Desktop.
;;; callback hellを限定継続でなんとかしようとしたログ
;; callbackなファイルAPI
(use gauche.partcont)
(use file.util)
(define (read-dir dir callback)
(callback (filter (compose not file-is-directory?) (directory-list dir))))
(define (read-file path callback)
(callback (file->string path)))
;; 普通にcallbackで書く
(read-dir "./" (lambda (files)
(read-file (car files) (lambda (data)
(display data)))))
;; shift/resetで書く
(reset
(display
(shift cont1
(reset (read-file
(shift cont2
(read-dir "./" (compose cont2 car)))
cont1)))))
;; letで名前を付ける
(let [(data
(shift cont1
(reset (let [(file (shift cont2
(read-dir "./" (compose cont2 car))))]
(read-file file cont1)))))]
(reset (display data)))
;; let*で更に書き直す
(let* [(file (shift cont1 (read-dir "./" (compose cont1 car))))
(data (shift cont2 (reset (read-file file cont2))))]
(reset (display data)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment