2015/12/20
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))