Estoy repasando el libro "Little Schemer" y haciendo las diversas funciones. En general, termino con la misma versión que los libros, pero no para eqlist ?, que es una función para probar la igualdad de dos listas.Little Schemer eqlist? función - versión alternativa?
He intentado probar mi versión y pasa todo lo que arroje. Sin embargo, es un poco diferente de la versión de "Little Schemer", y me gustaría la opinión de alguien sobre si me estoy perdiendo algo, sospecho que ese es el caso.
Mi versión:
(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)))))))
versión 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)))))))
Y en ambos casos la definición de eqan es:
(define eqan?
(lambda (a1 a2)
(cond
((and (number? a1)(number? a2)) (equal? a1 a2))
((or (number? a1)(number? a2)) #f)
(else (eq? a1 a2)))))
Gracias!
Joss Delage versión
+1 para la pregunta de la pequeña Schemer :-) – csl