Cosa c'è di sbagliato con il mio codice schema?
Domanda
La funzione che ho scritto per SICP 2.20 è:
(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))))))
E poi provo a chiamarla con il
(same-parity 1 2 3 4 5 6 7)
L'errore che ottengo è: "Il #t oggetto, passato come primo argomento di interi uguali? Non è del tipo corretto."
ho pensato che le opere di parità con gli #t e #f ...
Un esempio di codice che ho trovato in rete è la seguente, mi sono imbattuto e funziona. Ma, che cosa sto sbagliando?
(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)))
Soluzione
La procedura di = accetta numeri. Ma anche? ritorna un valore booleano non un numero.
Usa uguali? invece di =.
uguale? opere con booleani.
Per esempio al 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow