2013年6月1日土曜日

Scheme - 記号データ(クォート)

開発環境

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

その他参考書籍

問題 2.53

(a b c)

((george))

((y1 y2))

(y1 y20

#f

#f

(red shoes blue socks)

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

1 ]=> (list 'a 'b 'c)

;Value 2: (a b c)

1 ]=> (list (list 'george))

;Value 3: ((george))

1 ]=> (cdr '((x1 x2) (y1 y2)))

;Value 4: ((y1 y2))

1 ]=> (cadr '((x1 x2) (y1 y2)))

;Value 5: (y1 y2)

1 ]=> (pair? (car '(a short list)))

;Value: #f

1 ]=> (memq 'red '((red shoes) (blue sockes)))

;Value: #f

1 ]=> (memq 'red '(red shoes blu socks))

;Value 6: (red shoes blu socks)

問題 2.54

コード

sample.scm

(define (equal? a b)
  (if (and (pair? a) (pair? b))
      (and (eq? (car a) (car b))
           (equal? (cdr a) (cdr b)))
      (eq? a b)))

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

1 ]=> (equal? '(this is a list) '(this is a list))

;Value: #t

1 ]=> (equal? '(this is a list) '(this (is a) list))

;Value: #f

問題 2.55

解釈系がやっていること。(特殊形式quoteを使って補正)

(car ''abdacadabra)

(car (quote (quote abdacadabra)))

quote

ということで、解釈系はquoteと印字する。

0 コメント:

コメントを投稿