2015年4月13日月曜日

開発環境

計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.2(階層データ構造と閉包性)、2.2.2(階層構造)、問題2.26.を解いてみる。

その他参考書籍

問題2.26.

コード(BBEdit, Emacs)

(define reverse
  (lambda (items)
    (define iter
      (lambda (list1 list2)
        (if (null? list1)
            list2
            (iter (cdr list1) (cons (car list1) list2)))))
    (iter items (list))))

(define deep-reverse
  (lambda (items)
    (define iter
      (lambda (x)
        (if (pair? x)
            (reverse x)
            x)))
    (define iter1
      (lambda (list1 list2)
        (if (null? list1)
            list2
            (iter1 (cdr list1)
                   (cons (iter (car list1))
                         list2)))))
    (iter1 items '())))
                   
    
(define x (list (list 1 2) (list 3 4)))

x

(reverse x)

(deep-reverse x)

入出力結果(Terminal(kscheme), REPL(Read, Eval, Print, Loop))

$ kscheme  < sample26.scm
In : Out: reverse
;(total-pushes = 3 maximum-depth = 3)
In : Out: deep-reverse
;(total-pushes = 3 maximum-depth = 3)
In : Out: x
;(total-pushes = 18 maximum-depth = 11)
In : Out: ((1 2) (3 4))
;(total-pushes = 0 maximum-depth = 0)
In : Out: ((3 4) (1 2))
;(total-pushes = 56 maximum-depth = 9)
In : Out: ((4 3) (2 1))
;(total-pushes = 186 maximum-depth = 16)
In : $

0 コメント:

コメントを投稿