プログラミングGauche 6.5 簡単なリスト処理 deep-copy-list
2009年05月05日
ネストしたリストも全てコピーする deep-copy-list
を考える。
ただコピーしただけだと結果を見てもネストしたリストの要素もコピーされているのかよく分からないので、要素を2倍してコピーさせている。
;; copy-list (define (copy-list lis) (if (not (pair? lis)) lis (cons (* 2 (car lis)) (copy-list (cdr lis))))) (copy-list '(1 2 3 4 5)) gosh> (2 4 6 8 10) (copy-list '((1 2) 3 (4 5))) gosh> *** ERROR: operation * is not defined between 2 and (1 2) Stack Trace: (copy-list '((1 2) 3 (4 5) ((6 7 (8 9))))) gosh> *** ERROR: operation * is not defined between 2 and (1 2) Stack Trace: ;; deep-copy-list (define (deep-copy-list lis) (if (null? lis) lis (if (pair? (car lis)) (cons (deep-copy-list (car lis)) (deep-copy-list (cdr lis))) (cons (* 2 (car lis)) (deep-copy-list (cdr lis)))))) (deep-copy-list '(1 2 3 4 5)) gosh> (2 4 6 8 10) (deep-copy-list '((1 2) 3 (4 5))) gosh> ((2 4) 6 (8 10)) (deep-copy-list '((1 2) 3 (4 5) ((6 7 (8 9))))) gosh> ((2 4) 6 (8 10) ((12 14 (16 18))))
プログラミングGauche
posted with amazlet at 08.11.14
Kahuaプロジェクト
オライリージャパン
売り上げランキング: 22775
オライリージャパン
売り上げランキング: 22775