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) のリスト操作の実践的なコードを垣間見た気がした。
こういう良質なコードをもっと読まないと。
書くことに比べて、読むことが後回しになりがちなのが問題。