Sto esaminando il libro "Little Schemer" e sto facendo le varie funzioni. Generalmente finisco con la stessa versione dei libri, ma non con eqlist ?, che è una funzione per testare l'uguaglianza di due liste.Little Schemer eqlist? funzione - versione alternativa?
Ho provato a testare la mia versione e passa tutto ciò che lancio. Eppure è leggermente diverso dalla versione "Little Schemer", e mi piacerebbe l'opinione di qualcuno sul fatto che mi manchi qualcosa - sospetto che sia così.
La mia versione:
(define eqlist?
(lambda (list1 list2)
(cond
((and (null? list1)(null? list2))#t)
((or (null? list1)(null? list2))#f)
((and (atom? list1)(atom? list2))(eqan? list1 list2))
((or (atom? list1)(atom? list2)) #f)
(else
(and(eqlist? (car list1) (car list2))
(eqlist? (cdr list1) (cdr list2)))))))
versione del libro:
(define eqlist2? ;This is Little Schemer's version
(lambda (list1 list2)
(cond
((and (null? list1)(null? list2)) #t)
((or (null? list1)(null? list2)) #f)
((and (atom? (car list1))(atom? (car list2)))
(and (eqan? (car list1)(car list2))(eqlist2? (cdr list1)(cdr list2))))
((or (atom? (car list1))(atom? (car list2))) #f)
(else
(and (eqlist2? (car list1)(car list2))
(eqlist2? (cdr list1)(cdr list2)))))))
E in entrambi i casi la definizione di eqan è:
(define eqan?
(lambda (a1 a2)
(cond
((and (number? a1)(number? a2)) (equal? a1 a2))
((or (number? a1)(number? a2)) #f)
(else (eq? a1 a2)))))
Grazie!
Joss Delage versione
+1 per la domanda da The Little Schemer :-) – csl