第二章
#lang racket
; SICP 2.17 1.18 P69
(define x (list 1 2 3 4 5))
(define y (list 6 7 8 9))
(define (last-pair items)
(if (null? (cdr items))
items
(last-pair(cdr items))))
(define (cars items)
(cond ((null? items) null)
((null? (cdr items)) items)
((null? (cdr (cdr items))) (cons (car items) null))
(else (cons (car items) (cars (cdr items))))))
(define (conss list1 list2)
(cond ((null? list1) list2)
((null? (cdr list1)) (cons (car list1) list2))
((null? (cdr (cdr list1))) (cons (car list1) (cons (car (cdr list1)) list2)))
(else (conss (cars list1) (cons (car (last-pair list1)) list2)))
)
)
(define (reverse items)
(cond ((null? items) null)
((null? (cdr items)) items)
((null? (cdr (cdr items))) (cons (car (cdr items)) (cons (car items) null)))
(else (conss (reverse (cdr items)) (cons (car items) null)))))
(cars x)
(conss x y)
(reverse x)