プログラミングGauche 6.5 簡単なリスト処理 練習問題
プログラミング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 …続きを読む
プログラミング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 …続きを読む
SICP を読んでいて、どうもリストの操作がきちんと理解できていないことから問題を解くのに手間取っているようなのでリストを作る手続き cons、 append、 list についてメモをしておく。 cons 先頭にくる要素と残りのリストを組み合わせてリストを作る。 (cons a b) ;gosh> ((1 2 3) 4 5 6) (cons ‘0 a) ;gosh> (0 1 2 3…続きを読む
Scheme処理系の Gauche で #?= を使って printf debug をする。 #?=expr は (debug-print expr) と置き換えられ expr を評価して結果を返す。 結果を返す前後に、評価式とその値を print する。 使用例 再帰的プロセスの factorial gosh> (define (factorial n) (if (= n 1) 1 (* …続きを読む