プログラミングGauche 6.5 簡単なリスト処理 deep-copy-list

ネストしたリストも全てコピーする 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
プログラミングGauche

posted with amazlet at 08.11.14
Kahuaプロジェクト
オライリージャパン
売り上げランキング: 22775
«
»