Scheme 手習い 10 章 (2)

そういえば、ということで git fetch してみた。

$ git fetch
remote: Counting objects: 119, done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 117 (delta 76), reused 108 (delta 67)
Receiving objects: 100% (117/117), 11.02 KiB | 7 KiB/s, done.
Resolving deltas: 100% (76/76), completed with 2 local objects.
From git://github.com/hanachin/TheLittleSchemer
   b5c9960..3fba462  master     -> origin/master
$

あら、10.scm ってのが無いな。ログ見たら Y combinator なナニまでになっておりますな。9 なナニは取得したと思っていたのだけれどナチュラルだったのかなぁ。

明日から

休暇を頂戴しておるのですが、ip unreachable になる瞬間もあるのでその時には鉛筆と紙と見習いを持っていこうと思ってます。のですが、とりあえず 184p に出ている meaning という手続きについて掘削してみることに。
定義が以下。

(define meaning
  (lambda (e table)
    ((expression-to-action e) e table)))

expression-to-action 手続きの定義が以下。

(define expression-to-action
  (lambda (e)
    (cond
      ((atom? e) (atom-to-action e))
      (else (list-to-action e)))))

atom-to-action も list-to-action も手続きを戻す手続きですね。ちなみに value という手続きが出てて lisp/scheme の eval と同等、とあります。

(define value
  (lambda (e)
    (meaning e (quote ()))))

環境の初期値が空だな。atom-to-action 手続きの作りがアレ。突き詰めると apply-primitive の作りが環境を使ってないから、ということで良いのかな。
SICP カンニングしつつ REPL な実装をでっち上げてみる夏休暇というのも若干微妙。