Esta es la función que elimina el último elemento de la lista. ..¿Ayuda a explicar cómo funcionan los "contras" en Scheme?
(define (remove-last ll)
(if (null? (cdr ll))
'()
(cons (car ll) (remove-last (cdr ll)))))
Así que desde mi entendimiento si cons
una lista (por ejemplo a b c
con una lista vacía, es decir '()
, deberíamos obtener a b c
Sin embargo, las pruebas en las ventanas de interacción (DrScheme), el resultado fue:
Si (cons '()' (ABC))
(() a b c)
Si (cons '(abc)'())
((a b c))
Soy como qué demonios :(! Luego volví a mi problema, eliminé todos los elementos que tienen un duplicado adyacente. Por ejemplo, (a b a a c c)
sería (a b)
.
(define (remove-dup lst)
(cond ((null? lst) '())
((null? (cdr lst)) (car lst))
((equal? (car lst) (car (cdr lst))) (remove-dup (cdr (cdr lst))))
(else (cons (car lst) (car (cdr lst))))
)
)
No era correcto, sin embargo me doy cuenta de la respuesta tener un .
entre a b
. ¿Cómo pudo pasar esto?
`(a . b)`
sólo había una llamada a cons
en mi código anterior, no pude ver qué parte podría generar este .
. ¿Alguna idea?
Gracias,
respuesta elegante. Muchas gracias ;) – Chan