Ich gehe durch das Buch "Little Schemer" und mache die verschiedenen Funktionen. Im Allgemeinen habe ich die gleiche Version wie die Bücher, aber nicht für eqlist?, Die eine Funktion ist, um die Gleichheit zweier Listen zu testen.Little Schemer eqlist? Funktion - alternative Version?
Ich habe versucht, meine Version zu testen, und es passiert alles, was ich damit werfe. Aber es ist ein bisschen anders als die "Little Schemer" -Version, und ich möchte jemandes Meinung darüber, ob ich etwas vermisse - ich vermute, dass das der Fall ist.
Meine Version:
(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)))))))
Die Version des Buches:
(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)))))))
Und in beiden Fällen ist die Definition von eqan ist:
(define eqan?
(lambda (a1 a2)
(cond
((and (number? a1)(number? a2)) (equal? a1 a2))
((or (number? a1)(number? a2)) #f)
(else (eq? a1 a2)))))
Thank you!
Joss Delage
+1 für Frage von The Little Schemer :-) – csl