プログラミングGauche 9.1 集合 練習問題
delete-1 の定義を一箇所変更して、一致するものを全て取り除く delete を定義する。 (define (delete elt lis . options) (let-optionals* options ((cmp-fn equal?)) (define (loop lis) (cond ((null? lis) ‘()) ((cmp-fn elt (car lis)) (loop (…続きを読む
delete-1 の定義を一箇所変更して、一致するものを全て取り除く delete を定義する。 (define (delete elt lis . options) (let-optionals* options ((cmp-fn equal?)) (define (loop lis) (cond ((null? lis) ‘()) ((cmp-fn elt (car lis)) (loop (…続きを読む
問題3.82 (define (estimate-integral p x1 x2 y1 y2) (define monte-carlo-stream (stream-map (lambda (m) (* (- x2 x1) (- y2 y1) m)) (monte-carlo random-in-range-experiment-stream 0.0 0.0))) (define random-…続きを読む
xz圧縮を Max OSX で使うために MacPorts から xz-devel と GNU tar 1.22 をインストールする。 $ sudo port install xz-devel $ sudo port install gnutar 使い方 -J オプションを使って xz圧縮を利用する。 $ tar -cJvf hoge.tar.xz hoge/
プログラミングGauche 練習問題(p101)を解く。 手続き any-pred と every-pred を自分で定義する。 any-pred ;; 最初に思いついた解答 (define (any-pred . preds) (define (iter preds x) (if (null? preds) #f (if ((car preds) x) #t (iter (cdr preds) …続きを読む
問題3.81 問題文が解りにくいが、 generate または reset の要求を表す値(’generate と 整数 を使う)から成るストリームを引数にとって、それぞれの要求に対応して作られた乱数からなるストリームを作る。 (define (rand-update x) (remainder (+ x 1812433253) 4294967296)) (define (rand input-s…続きを読む
lambda 式内の a は letrec 内で b が呼び出される時に使われる。 (letrec ((a 1) (b (lambda (x) (+ a x)))) (b 4)) gosh> 5 (letrec ((a 1) (b (lambda (x) (+ a x)))) (set! a 2) (b 4)) gosh> 6 プログラミングGaucheの練習問題(p74)を解く。 (…続きを読む
プログラミングGaucheの練習問題(p68)を解く。 for-each-numbers (define (for-each-numbers proc lis) (for-each proc (filter number? lis))) (for-each-numbers print ‘(1 2 #f 3 4 #t)) gosh> 1 2 3 4 #<undef> map-num…続きを読む
処理の一番最後に再帰呼び出しをして、その結果がそのまま現在の処理の結果として返されるパターンを末尾再帰と呼びます。 (プログラミングGauche p57) プログラミングGauche posted with amazlet at 08.11.14 Kahuaプロジェクト オライリージャパン 売り上げランキング: 22775 Amazon.co.jp で詳細を見る reverse を末尾再帰で書き直…続きを読む
プログラミングGaucheの練習問題(p56)を解く。 リストの長さを計算する手続き length。 (define (length lis) (define (iter lis result) (if (null? lis) result (iter (cdr lis) (+ result 1)))) (iter lis 0)) (length ‘(1 2 3 4 5)) gosh> 5 …続きを読む
ネストしたリストも全てコピーする deep-copy-list を考える。 ただコピーしただけだと結果を見てもネストしたリストの要素もコピーされているのかよく分からないので、要素を2倍してコピーさせている。 ;; copy-list (define (copy-list lis) (if (not (pair? lis)) lis (cons (* 2 (car lis)) (copy-list …続きを読む