Quel est le problème avec mon code de système?
Question
La fonction que j'ai écrit pour SICP 2.20 est:
(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))))))
Et puis je tente de l'appeler avec
(same-parity 1 2 3 4 5 6 7)
Le I get erreur est: « Le #t d'objet, transmise en tant que premier argument à égale entier? Est pas le bon type. »
Je pensais que des œuvres égales avec #t et #f ...
Un exemple de code que je trouve est en ligne ce qui suit, je l'ai couru et il fonctionne. Mais, qu'est-ce que je fais mal?
(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)))
La solution
La procédure = accepte les numéros. Mais même? retourne un booléen pas un nombre.
Utilisation égale? au lieu de =.
égal? fonctionne avec booléens.
Par exemple au 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow