Решение упражнения 2.54 из SICP

7 February, 2008 (21:23) | Решения упражнений

В соответствии с примечанием реализуем процедуру 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)))

Comment from Irv
Date: December 28, 2016, 7:43 pm

(define (list-equal? a b)
 (or
  (and
   (and (pair? a) (pair? b))
   (eq? (car a) (car b))
   (list-equal? (cdr a) (cdr b)))
  (eq? a b)))

Write a comment