Frage

Die Funktion I für SICP schrieb 2.20 ist:

(define (same-parity x . y)
  (if (null? (car y)
  '()
  (if (= (even? (car y)) (even? x))
     (cons (car y) (same-parity (cons x (cdr y))))
     (same-parity (cons x (cdr y))))))

Und dann versuche ich es zu nennen mit

(same-parity 1 2 3 4 5 6 7)

Der Fehler I get ist: „Das Objekt #t, als erstes Argument zu ganzzahligen gleich übergeben? Ist nicht der richtige Typ.“

dachte ich, dass gleiche Arbeiten mit #t und #f ...

Ein Beispiel für Code, den ich online zu finden ist die folgende, lief ich es und es funktioniert. Aber was mache ich falsch?

(define (same-parity a . rest)
  (define (filter rest)
    (cond ((null? rest) '())
          ((= (remainder a 2) (remainder (car rest) 2))
           (cons (car rest) (filter (cdr rest))))
          (else
            (filter (cdr rest)))))
  (filter (cons a rest)))
War es hilfreich?

Lösung

Die = Prozedur akzeptiert Zahlen. Aber selbst? gibt einen booleschen keine Zahl.

Verwenden gleich? statt =.

gleich? Arbeiten mit booleans.

Zum Beispiel bei der REPL:

> (even? 2)
#t

> (= (even? 2) (even? 2))
=: expects type <number> as 1st argument, given: #t; other arguments were: #t

> (equal? (even? 2) (even? 2))
#t
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top