2014年4月7日月曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.2(階層データ構造と閉包性)、2.2.3(公認インターフェースとしての並び)、写像の入れ子、問題 2.41.を解いてみる。

その他参考書籍

問題 2.41.

コード(BBEdit, Emacs)

sample.scm

#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-

;; これまでに書いた手続き
(load "./procedures.scm")

(define (unique-three-lists n)
  (flatmap (lambda (k)
             (flatmap (lambda (j)
                        (map (lambda (i)
                               (list i j k))
                             (enumerate-interval 1 (- j 1))))
                      (enumerate-interval 1 (- k 1))))
           (enumerate-interval 1 n)))

(define (s-sum-three-list? s seq)
  (if (= (+ (car seq)
            (car (cdr seq))
            (car (cdr (cdr seq))))
         s)
      #t
      #f))

(define (s-sum-three-lists s lists)
  (filter (lambda (seq)
            (s-sum-three-list? s seq))
          lists))

((lambda (s)
   ((lambda (n)
      (print "順序づけられた" n "より小さいか異なる正の整数の3つの組")
      ((lambda (lists)
         (for-each print lists)
         (print "和が" s "になるものすべて")
         (for-each print
                   (s-sum-three-lists s lists)))
       (unique-three-lists n)))
    10))
 15)

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

$ ./sample.scm
順序づけられた10より小さいか異なる正の整数の3つの組
(1 2 3)
(1 2 4)
(1 3 4)
(2 3 4)
(1 2 5)
(1 3 5)
(2 3 5)
(1 4 5)
(2 4 5)
(3 4 5)
(1 2 6)
(1 3 6)
(2 3 6)
(1 4 6)
(2 4 6)
(3 4 6)
(1 5 6)
(2 5 6)
(3 5 6)
(4 5 6)
(1 2 7)
(1 3 7)
(2 3 7)
(1 4 7)
(2 4 7)
(3 4 7)
(1 5 7)
(2 5 7)
(3 5 7)
(4 5 7)
(1 6 7)
(2 6 7)
(3 6 7)
(4 6 7)
(5 6 7)
(1 2 8)
(1 3 8)
(2 3 8)
(1 4 8)
(2 4 8)
(3 4 8)
(1 5 8)
(2 5 8)
(3 5 8)
(4 5 8)
(1 6 8)
(2 6 8)
(3 6 8)
(4 6 8)
(5 6 8)
(1 7 8)
(2 7 8)
(3 7 8)
(4 7 8)
(5 7 8)
(6 7 8)
(1 2 9)
(1 3 9)
(2 3 9)
(1 4 9)
(2 4 9)
(3 4 9)
(1 5 9)
(2 5 9)
(3 5 9)
(4 5 9)
(1 6 9)
(2 6 9)
(3 6 9)
(4 6 9)
(5 6 9)
(1 7 9)
(2 7 9)
(3 7 9)
(4 7 9)
(5 7 9)
(6 7 9)
(1 8 9)
(2 8 9)
(3 8 9)
(4 8 9)
(5 8 9)
(6 8 9)
(7 8 9)
(1 2 10)
(1 3 10)
(2 3 10)
(1 4 10)
(2 4 10)
(3 4 10)
(1 5 10)
(2 5 10)
(3 5 10)
(4 5 10)
(1 6 10)
(2 6 10)
(3 6 10)
(4 6 10)
(5 6 10)
(1 7 10)
(2 7 10)
(3 7 10)
(4 7 10)
(5 7 10)
(6 7 10)
(1 8 10)
(2 8 10)
(3 8 10)
(4 8 10)
(5 8 10)
(6 8 10)
(7 8 10)
(1 9 10)
(2 9 10)
(3 9 10)
(4 9 10)
(5 9 10)
(6 9 10)
(7 9 10)
(8 9 10)
和が15になるものすべて
(4 5 6)
(3 5 7)
(2 6 7)
(3 4 8)
(2 5 8)
(1 6 8)
(2 4 9)
(1 5 9)
(2 3 10)
(1 4 10)
$

0 コメント:

コメントを投稿