Gauche

プログラミング Gauch - 17 章 フラグで切り分けてみる

よくないと思いつつ、フラグで動作を切り分けた。 (define-method apply-generic ((gf ) args) (inc! (ref gf 'counter)) (with-time-counter (ref gf 'time) (next-method gf (cons '#f args))))next-method を呼ぶ際に #f か #t を引数の先頭に付加してみ…

プログラミング Gauch - 17 章 練習問題

メソッド適用のカスタマイズについて。ここの動作がよくわからない。とりあえず動作を順に書き出してみよう。 クラスが定義される。これが総称関数クラス。 クラスへの総称関数適用方法が変更される。それを行うのが apply-generic。 を継承した クラスが定…

プログラミング Gauch - 17 章

今週は少しサボってしまい、ようやく半分到達というところです。学習が進むにつれて、Ruby が Matz Lisp などと言われる理由が解ってきたような気がします。 ! ? といった命名ルール 手続きを渡す手続き(コードブロック、lambda) メタクラス などなど、Ruby …

プログラミング Gauche - 8 章

真偽判定について。3 節の練習問題をやってみました。 手続きを返す手続きなので、内部は lambda になります。受け取る引数は可変長引数で、中身は手続きのリストです。引数として受け取った全ての手続きを(lambda の)引数に適用した結果、一つでも真値があ…

プログラミング Gauche - 9 章

1 節の練習問題でいきなり詰まりました。cons でリストのコピーを行わずに要素を探します。まったくお手上げだったのですが、Kahua のページに解答が載っていました。 (define (delete-1 elt lis . options) (let-optionals* options ((cmp-fn equal?)) (def…

プログラミング Gauche - 7 章さらにつづき

P.83 キーワード引数 (define (person . args) (let-keywords args ((name "Anonymous") (age "unknown")) (print name " is " age " year(s) old."))) ERROR: unbound variable: age Stack Trace: _______________________________________ 0 (age "unknown…

プログラミング Gauche - 7 章つづき

本に印をつけるのに、無印良品の透明付箋紙を使って見ました。本に貼り付けても文字が隠れないし、紙の付箋紙よりもしっかりしているところがよいです。 今日はローカル変数のスコープと可変長引数について。4 節の練習問題をやってみた。 ;; 受け取った可変…

プログラミング Gauche - 7 章

2 節の練習問題をやってみた。数値とそれ以外のものが混じったリストから数値だけに手続きを適用する。 (define (for-each-numbers pred lis) (for-each (lambda (elt) (if (number? elt) (pred elt))) lis)) (for-each-numbers (lambda (x) (print (* x x))…

プログラミング Gauche - 6 章

練習問題をやってみた。 ;; リストの長さを計算する (define (length lis) (if (null? lis) 0 (+ (length (cdr lis)) 1))) ;; リストから条件に合うものを抽出してリストにする (define (scan pred lis) (cond [(null? lis) '()] [(pred (car lis)) (append2…

FizzBuzz を書いてみた

(define (check num) (cond [(zero? (modulo num 15)) 'FizzBuzz] [(zero? (modulo num 3)) 'Fizz] [(zero? (modulo num 5)) 'Buzz] (else num))) (define (fizzbuzz num max) (print (check num)) (if (fizzbuzz (+ num 1) max))) (fizzbuzz 1 20)こんな感…