Skip to content

Instantly share code, notes, and snippets.

@yamasushi
yamasushi / gm.scm
Created July 16, 2012 05:27
Gumowski-mira写像の点列生成(gnuplotで描画する)
#!/usr/bin/env gosh
(use gauche.generator)
(use gauche.parseopt)
(use srfi-27) ; 乱数
(use srfi-1) ; list
(define (make-gm-generator a m x0 y0)
(define (f x)
(let1 xx (* x x)
(+ (* m x) (/ (* 2 (- 1 m) xx) (+ 1 xx) ) )
@yamasushi
yamasushi / graph.scm
Created July 22, 2012 06:37
探索アルゴリズムの実装(グラフ定義)
; graph
; 「人工知能システムの構成」をogura
; 「人工知能の基礎知識」をtahara
;グラフのコストを入力するための手続き
; 単方向のコスト
(define (gcost from to cost)
(list (cons (cons from to) cost) ) )
; 双方向のコスト
@yamasushi
yamasushi / tansaku-0.scm
Created July 22, 2012 06:38
探索アルゴリズムの実装(アルゴリズム)
(use srfi-1)
(use srfi-13)
(load "graph")
(define param-ogura35a `(,ogura-graph35a ,ogura-cost35a ,ogura-h35a ))
(define param-ogura35b `(,ogura-graph35b ,ogura-cost35b ,ogura-h35b ))
(define param-ogura36 `(,ogura-graph36 ,ogura-cost36 ,ogura-h36 ))
(define param-tahara319 `(,tahara-graph35 ,tahara-cost311 ,tahara-h319))
(define param-tahara327 `(,tahara-graph35 ,tahara-cost311 ,tahara-h327))
@yamasushi
yamasushi / grep.scm
Created July 22, 2012 06:41
Gaucheマニュアルのgrepサンプルを改造してみる。
#!/usr/bin/env gosh
(use util.match)
; マニュアルからコピー
(define (usage)
(format (current-error-port)
"Usage: ~a regexp file ...\n" *program-name*)
(exit 2))
@yamasushi
yamasushi / cat.scm
Created July 22, 2012 06:42
Gaucheマニュアルのcatサンプルを改造してみる。
#!/usr/bin/env gosh
(define (open-with-input-files files proc)
(if (null? files)
(proc (current-input-port) )
(for-each
(lambda (f)
(call-with-input-file f proc))
files)))
@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