読者です 読者をやめる 読者になる 読者になる

計算機プログラムの構造と解釈 第二版 P85 問題2.55

なかなか面白い。
「''」が内部的にどういう解釈になっているのかわかればいいのかな?
って感じでやってみた。


まず、

(car ''abracadabra)

と入力した、驚いたことに解釈系はquoteと印字してきた.なぜか.

ってあるんだけど、実際にやってみるとそのようになった。


こうやられちゃうと気になるのが、cdrした場合はどうなるわけ?
っていうのを考えちゃう訳だ。

(cdr ''abracadabra)

やってみると

(abracadabra)

が返ってくる。


まーこんな事をやりながら、多分こんな感じのことを内側でやっているのだろう
ということを見つけたので書いておく。

実装

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

(use ggc.debug.trace)
(use math.mt-random)


;; main
(define (main args)

  (display "(car ''abracadabra): ")
  (display (car ''abracadabra))
  (newline)

  (display "(cdr ''abracadabra): ")
  (display (cdr ''abracadabra))
  (newline)

  (display "(cddr ''abracadabra): ")
  (display (cddr ''abracadabra))
  (newline)

  (display "'abracadabra: ")
  (display 'abracadabra)
  (newline)

  (display "''abracadabra: ")
  (display ''abracadabra)
  (newline)

  (display "(car (cond '' 'abracadabra)): ")
  (display (car (cond '' 'abracadabra)))
  (newline)

  (display "(cdr (cond '' 'abracadabra)): ")
  (display (cdr (cond '' 'abracadabra)))
  (newline)

  0)


実行

(car ''abracadabra): quote
(cdr ''abracadabra): (abracadabra)
(cddr ''abracadabra): ()
'abracadabra: abracadabra
''abracadabra: 'abracadabra
(car (cond '' 'abracadabra)): quote
(cdr (cond '' 'abracadabra)): (abracadabra)

んー、おしえて偉いヒト、、ってかんじだなぁ。
どういうことなんだろ。。。