Skip to content

Instantly share code, notes, and snippets.

@yamasushi
yamasushi / call-with-input-http.scm
Created July 26, 2012 23:19
httpをcall-with-input系アクセスする。スレッドを使うかどうかを切り替えられるように。
; スレッドを使わずにcall-with-input-httpを実装してみる
; スレッドを使うかどうかを切り替えられるように。
(use rfc.http)
(use gauche.generator)
(use gauche.uvector)
(use sxml.ssax)
(use gauche.vport)
(use inverter)
@yamasushi
yamasushi / inverter.scm
Created July 27, 2012 04:14
イテレータ反転
; イテレータ反転
(define-module inverter
(use gauche.generator)
(use util.stream)
;
(use util.queue)
(use gauche.threads)
;
(export
generator-inverter
@yamasushi
yamasushi / port-inverter.scm
Created July 27, 2012 06:28
ポートの反転
; ポートの反転
(define-module port-inverter
(use gauche.vport)
(use gauche.generator)
(use gauche.uvector)
;
(use inverter)
(export
mtport-inverter
))
@yamasushi
yamasushi / call-with-input-http.scm
Created July 27, 2012 06:31
call-with-input-httpを「ポートの反転」で書く。
; http-getのパラメタ指定してhttp-get、procに仮想ポートを渡す。
(define (call-with-input-http http-param proc :key (queue-size 100) (buffer-size 8000) )
(let1 inverter (mtport-inverter :queue-size queue-size :buffer-size buffer-size)
(inverter
(^[outp] (apply http-get (append http-param `(:sink ,outp :flusher ,(^ _ (flush outp) #t) ))))
(^[inp] (proc inp) ) ) ) )
@yamasushi
yamasushi / uvslices.scm
Created July 28, 2012 06:10
Slices of unifom vector(ユニフォームベクタのスライス)
(use gauche.uvector)
(define (uvector-slices u k)
(let [(uvclass (class-of u))
(l (uvector-length u))]
(receive (n r) (quotient&remainder l k)
(let1 s (* n k)
(let loop [(i s)
(d (if (= r 0)
'()
@yamasushi
yamasushi / port-dump.scm
Created July 28, 2012 08:13
ポートのダンプをするジェネレータ。
(use gauche.generator)
(use gauche.uvector)
(define (call-with-port-chunk port chunk-size size proc)
(let1 chunk (make-u8vector chunk-size)
(cond
[ (eqv? size 0) #t ]
[ (not size)
(until (read-block! chunk port 0 chunk-size) eof-object? => len
@yamasushi
yamasushi / call-with-input-chunk.scm
Created July 28, 2012 12:14
ポートをu8vectorでよんでいく。chunkサイズを指定する。
(use gauche.uvector)
(define (call-with-input-chunk port chunk-size size proc)
(let1 chunk (make-u8vector chunk-size)
(cond
[ (eqv? size 0) #t ]
[ (not size)
(until (read-block! chunk port 0 chunk-size) eof-object? => len
(proc (uvector-alias <u8vector> chunk 0 len) ) ; hook
) ]
@yamasushi
yamasushi / gchain.scm
Created August 1, 2012 11:02
chain of generator
(use gauche.generator)
(define (proc-a g yield)
(do-generator (x g)
(yield (* x 2))))
(define (proc-b g yield)
(do-generator (x g)
(yield (* x 3))))
@yamasushi
yamasushi / t.scm
Created August 3, 2012 03:50
イテレータの反転をつかったパイプライン。
(use gauche.generator)
(use text.tr)
(define (generator-inverter)
(^[produce consume] (consume (generate produce) ) ) )
(define (pipeline inverter cmd-in cmd-out)
(^[ g yield]
(inverter
(^[yield]
@yamasushi
yamasushi / gtab.scm
Created August 6, 2012 09:35
gtabulate試作
(use gauche.generator)
(define (gtabulate n init-proc)
(gunfold (cut >= <> n) init-proc (cut + <> 1 ) 0 ) )