athos #9276(2009/07/01 22:03 GMT) [ Scheme ] Rating1/1=1.00
#9269 は不評だったようなので、継続でコルーチンっぽいものを作って #9266 を参考にしてやってみました。 継続を生成するのにかなり時間がかかっているようです。 $ time ./doukaku271.scm 10000 1000 ./doukaku271.scm 10000 1000 43.23s user 0.36s system 98% cpu 44.303 total $
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
#!/usr/bin/env gosh (use util.queue) (use gauche.parameter) (define *nodes* (make-parameter #f)) (define (yield msg hop) (let/cc cc (enqueue! (*nodes*) cc) ((dequeue! (*nodes*)) msg hop))) (define (make-node name) (lambda (msg hop) (let loop ([msg msg] [hop hop]) (cond [(= hop 0) #f] [else #;(format #t "~a: ~a~%" name msg) (receive (msg hop) (yield msg (- hop 1)) (loop msg hop))])))) (define (init-nodes n) (*nodes* (make-queue)) (dotimes (i n) (enqueue! (*nodes*) (make-node #`"N,|i|")))) (define (run msg n m) (init-nodes n) ((dequeue! (*nodes*)) msg (* n m))) (define (main args) (run "Hello, world!" (x->integer (car *argv*)) (x->integer (cadr *argv*))) 0)
Rating1/1=1.00-0+
[ reply ]
athos
#9276()
[
Scheme
]
Rating1/1=1.00
Rating1/1=1.00-0+
[ reply ]