SICP 問題 4.10
;; 後置式にする ;; 全部はめんどうなのでquoteだけ. ;; リストの最後の項か尋ねるlast? ;; 空リストは#fを返す. (define (last? lst) (if (null? lst) #f (null? (cdr lst)))) ;; リストの最後の項を取る選択子last (define (last lst) (if (last? lst) lst (lst (cdr lst)))) ;; cdrの逆で最後の項を取り除いたリストを返す (define (rid-last lst) (let iter ((lst lst) (result '())) (cond ((null? lst) (error "pair required, but got" lst)) ((last? lst) (reverse result)) (else (iter (cdr lst) (cons (car lst) result)))))) ;; クオート式 (define (quoted? exp) (tagged-list? exp 'quote)) (define (text-of-quotation exp) (rid-last exp)) ;; リストが指定sれた記号から始まるかどうかを確認する手続き (define (tagged-list? exp tag) (if (pair? exp) (eq? (last exp) tag) false))