Я пытаюсь решить проблему с выводом только не повторяющихся элементов n списка в схеме. например, '(a b a a a c c)
даст (a b)
.Решение нечетных повторений в схеме
Я реализовал это решение:
(define (remove L)
(if (null? L)
L
(let ((firstL (car L)) (restL (cdr L)))
(if (null? restL)
(cons firstL())
(if (equal? firstL (car restL))
(remove (cdr restL))
(cons firstL (remove restL)))))))
Однако это также выводит элементы с нечетным числом повторений. например: (a b a a a c c) даст (a b a).
Я пытаюсь это исправить, но я не мог. Примером одного из решений, которые я попытался это:
(define (remove L)
(if (null? L)
L
(let ((result()) (firstL (car L)) (restL (cdr L)))
(if (null? restL)
(result)
(if (equal? firstL (car restL))
(remove2 firstL restL)
(append ((list firstL) result))
(remove cdr restL)))))
(define (remove2 x y)
(cond ((null? y) (remove x)
((equal? x (car y)) (remove2 ((car y) (cdr y))))
(else (remove x)))))
Пожалуйста, если кто-то может понять решение, запишите его.
является trim- сначала встроенная функция в схеме? или я должен его реализовать? – Moana
@Maha Нет, вам нужно будет его реализовать. В своем ответе я указываю, как он должен работать. Я предполагаю, что это домашнее задание, поэтому я боюсь, что я испорчу ваше образование, если я вам очень помогу :) – Sylwester
Это не hw, я готовлю свой выпускной экзамен. Спасибо за вашу помощь. – Moana