2014年4月20日日曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.3(記号データ)、2.3.1(クォート)、問題 2.54.を解いてみる。

その他参考書籍

問題 2.54.

コード(BBEdit, Emacs)

sample.scm

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

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

(define (list? a)
  (if (or (null? a)
          (and (pair? a)
               (or (null? (cdr a))
                   (list? (cdr a)))))
      true
      false))

(define (equal? a b)
  (cond ((and (list? a)
              (list? b))
         (if (and (null? a)
                  (null? b))
             true
             (and (eq? (car a)
                       (car b))
                  (equal? (cdr a)
                          (cdr b)))))
         ((and (not (list? a))
               (not (list? b)))
          (eq? a b))
         (else false)))

(for-each print
          (list (equal? '(this is a list) '(this is a list))
                (equal? '(this is a list) '(this (is a) list))))

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

$ ./sample.scm
#t
#f
$

0 コメント:

コメントを投稿