Ta funkcja usuwa ostatni element z listy. ..Pomoc w wyjaśnieniu, jak działa "cons" w schemacie?
(define (remove-last ll)
(if (null? (cdr ll))
'()
(cons (car ll) (remove-last (cdr ll)))))
Więc z mojego zrozumienia, jeśli cons
lista (np a b c
z pustą listę, tzn '()
, powinniśmy dostać a b c
Jednak badania w oknach interakcji (DrScheme), wynik był:
Jeśli (przeciw '() (ABC))
(() a b c)
Jeśli (przeciw '(ABC),'())
((a b c))
Jestem jak co do cholery :(! Potem wróciłem do mojego problemu, usunąłem wszystkie elementy, które mają sąsiedni duplikat. Na przykład (a b a a c c)
będzie (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))))
)
)
To nie była prawidłowa, jednak zdaję sobie sprawę odpowiedź mają .
między a b
. Jak to mogło się stać?
`(a . b)`
było tylko jedno wezwanie do cons
w moim kodu powyżej, nie mogłem zobaczyć, jaka część może generować ten .
. Dowolny pomysł?
Dzięki,
Elegancki odpowiedź. Wielkie dzięki ;) – Chan