Это функция, которая удаляет последний элемент списка.
(define (remove-last ll)
(if (null? (cdr ll))
'()
(cons (car ll) (remove-last (cdr ll)))))
Итак, из моего понимания, если мы cons
список (например. a b c
с пустым списком, т.е. '()
, мы должны получить
a b c
. Однако при тестировании в окнах взаимодействия (DrScheme) результатом был:
Если (cons '()' (a b c))
(() a b c)
Если (cons '(a b c)'())
((a b c))
Я как будто черт:(!
Затем я вернулся к своей проблеме, удалив все элементы, имеющие соседний дубликат. Например,
(a b a a c c)
будет (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))))
)
)
Это было неправильно, однако я понимаю, что ответ имеет .
между a b
. Как это могло случиться?
`(a . b)`
В моем коде выше был только один вызов cons
, я не мог видеть, какая часть может сгенерировать этот .
. Любая идея?
Спасибо,