Lo que está mal con mi código de esquema?
Pregunta
La función que escribí para SICP 2.20 es:
(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))))))
Y entonces trato de llamarlo con
(same-parity 1 2 3 4 5 6 7)
El get error que es: "El #t objeto, pasa como el primer argumento de número entero-igual? No es del tipo correcto."
Yo pensaba que las obras iguales con #t y #f ...
Un ejemplo de código que encontré en línea es la siguiente, me encontré con él y funciona. Pero, ¿qué estoy haciendo 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)))
Solución
La = procedimiento acepta números. ¿Pero incluso? devuelve un booleano no un número.
diseñar con los mismos? en lugar de =.
igual? trabajos con booleanos.
Por ejemplo en el 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow