Scheme - もっとコードを読もう


http://www.shido.info/lisp/scheme_cc.html にある queue の実装のコードをデバッグのために追っていた。
コードは↓。

(define (make-queue)
  (cons '() '()))

(define (enqueue! queue obj)
  (let ((lobj (list obj)))
    (if (null? (car queue))
(begin
  (set-car! queue lobj)
  (set-cdr! queue lobj))
(begin
  (set-cdr! (cdr queue) lobj)
  (set-cdr! queue lobj)))
    (car queue)))

これを読みながらノートに queue の構造を書いていて気づいた。
全然意識してなかったけど、同一の pair を参照しているのをうまく利用しているのだな。
Gauche の外部表現でいうところの↓のようなもの。

(#0=(a) . #0#)

短いコードだけど Scheme(Lisp) のリスト操作の実践的なコードを垣間見た気がした。

こういう良質なコードをもっと読まないと。
書くことに比べて、読むことが後回しになりがちなのが問題。