equal?

Synthroid Without Prescription Inderal No Prescription Nexium For Sale Prevacid Generic Buy Elimite Online Prevacid Without Prescription Ultram No Prescription Prevacid For Sale Ultram Generic Buy Prednisone Online

W ćwiczeniu 2.54 autorzy proszą nas o napisanie funkcji equal? zdolnej do porównywania list. Jej definicja wynika bezpośrednio z opisu.

(define (equal? a b)
  (if (and (pair? a) (pair? b))
      (and (equal? (car a) (car b))
           (equal? (cdr a) (cdr b)))
      (eq? a b)))

Implementacja ta radzi sobie doskonale z symbolami i (dowolnie zagnieżdżonymi) listami symboli, nie bierze jednak pod uwagę liczb. Jeżeli przyjmiemy, tak jak radzą nam autorzy w przypisie, że dwie liczby są równe, jeżeli ich wartości numeryczne są równe, to otrzymamy następującą implementację:

(define (equal? a b)
  (cond
   [(and (pair? a) (pair? b))
    (and (equal? (car a) (car b))
         (equal? (cdr a) (cdr b)))]
   [(and (number? a) (number? b))
    (= a b)]
   [else
    (eq? a b)]))