Решение упражнения 2.54 из SICP
В соответствии с примечанием реализуем процедуру equal? таким образом, чтобы она корректно работала и с числами тоже. Отметим также, что мы считаем два пустых списка эквивалентными.
Процедуру equal? можно определить таким образом:
(define (equal? a b) (or (and (null? a) (null? b)) (and (number? a) (number? b) (= a b)) (and (symbol? a) (symbol? b) (eq? a b)) (and (pair? a) (pair? b) (equal? (car a) (car b)) (equal? (cdr a) (cdr b)))))
Здесь я обошелся без конструкции cond, хотя можно было бы использовать при реализации и ее.
Comments
Comment from anton0xf
Date: August 17, 2009, 9:03 am
(define (equal? a b)
(if (and (pair? a) (pair? b))
(and (equal? (car a) (car b)) (equal? (cdr a) (cdr b)))
(eq? a b)))
Write a comment