gauche
簡単にまとめると、明示的な再帰を用いるプログラミングスタイルはよろしくないと言うこと。Haskellwikiにもそう書かれている。良い関数型プログラマは再帰を用いず再帰をパターン化した高階関数を使うのだそうだ。 maoeのブログ ということで,OnLispを少し…
継続を呼び出すと,継続に渡された変数は”多値”で返ってくる. そのため,receiveを使わなければ,すべてを受け取ることはできない(と思われる). 以下の簡単プログラムで実証してみた. (define cont #f) (receive (a b) (call/cc (lambda (c) (set! cont c…
SICPと平行して,プログラミングGaucheに取り組む. 今回は19.8のコルーチン.SICP前にこれに取り組んだときは手も足も出なかった... 今回は理解できた気がする. コルーチン機構を作り出すマクロは以下のもの. (use util.queue) (define *task* (make-queu…
id:rsakamot:20090502:1241226261では,継続わからないとつぶやいた.そしてそのまま放置してSICPへと移行した.SICP4.3では,継続(call/ccは使わず,ひたすら関数を渡す)を用いて,amb評価器を実装した. 細かい動きは理解し切れていない気がするが,おおよ…
Gaucheユーザリファレンスより (use math.mt-random) (define m (make <mersenne-twister> :seed (sys-time))) (mt-random-integer m 1000) (define (rand) (mt-random-integer m 1000)) こうしておくと, gosh> (rand) 164 gosh> (rand) 69(rand)で乱数が生成される.</mersenne-twister>
(define 関数名 (with-module gauche 関数名))
apt-get install gauche-glでインストールできるが,使おうとすると, libgauche-math3Dがどうかこうとかというエラーがでて使えないので,結局ソースを ./confiure make make installで入れた.
とりあえずgauche-glを取ってきて, freeglutを入れて,./configureをしたら, checking GL/glx.h usability... yes checking GL/glx.h presence... yes checking for GL/glx.h... yes checking GLUT/glut.h usability... no checking GLUT/glut.h presence... …
((lambda (x) (let ((x 3) (y (+ x 2))) (* x y))) 2) => 12 ((lambda (x) (let* ((x 3) (y (+ x 2))) (* x y))) 2) => 15
現在Gauche第19章6節に取り組み中なのだが,継続がいまいち分からない.特に (define-syntax for-each-ext (syntax-rules () [(_ break next lambda-expr arg-list ...) (let ((arg1 (list arg-list ...))) (call/cc (lambda (break) (apply for-each (lambda…
明日のゼミの課題だった,Cを解析して,ニーモニック風のコードを出すプログラムがとりあえず完成. しかしまるで手続き型のよう.しかもときどきperlかのようなところもある. しかも”コンパイルエラー”は未実装. とまぁ問題点を挙げればきりがない.しか…
(define (count-chars filename) (call-with-input-file filename (lambda (in) (let loop ((c (read-char in)) (count 0)) (cond [(eof-object? c) count] [else (write c) (loop (read-char in) (+ count 1))]))))) (count-chars "read-char.scm") (define…
(define (delete-1 elt lis . options) (if (member elt lis) (let-optionals* options ((cmp-fn equal?)) (define (loop lis) (cond [(null? lis) '()] [(cmp-fn elt (car lis)) (cdr lis)] [else (cons (car lis) (loop (cdr lis)))])) (loop lis)) lis)) …
(define (my-any-pred . pred) (lambda (x) (define (my-any-pred-core preds x) (cond [(null? #?=preds) #f] [((car preds) x) #t] [else (my-any-pred-core (cdr preds) x)])) (my-any-pred-core pred x))) (define (my-any-pred . pred) (lambda (x) (co…
(define (tree-walk walker proc tree) (walker (lambda (elt) (if (list? #?=elt) (tree-walk walker proc elt) (proc elt))) tree)) (define (numbers-only-for-tree walker) (lambda (proc lis) (walker proc #?=(my-filter (lambda (x) (or (number? x) …
(define (my-length lis) (define (loop a n) (if (null? a) n (loop (cdr a) (+ 1 n)))) (loop lis 0)) (define (my-length lis) (if (null? lis) 0 (+ 1 (my-length (cdr lis))))) (my-length '(1 2 (4 5) 3)) (define (my-filter pred lis) (define (loop…