Я очень благодарен за помощь. Я пытаюсь построить процедуру, которая удаляет дублированные элементы в списке. Эта часть проста. Но тогда я также хочу удалить дублированные элементы (которые также могут быть списками), и если это список, дублирующиеся элементы в этом списке также должны быть удалены, например (make-set (список 1 2 3 2 (список 1 3 2 4) 3 4) (список 1 3 2 4 3 4))) должен быть «(1 3 2 (1 2 3 4)), но в нашем случае он становится« (1 3 2 2 3 4). Это не то, что мы хотим. Что я делаю не так? Спасибо :)Удалить дублированные элементы в списке
;; Checks if an element x appears in a list (set)
(define (element-of-set? x set)
(cond ((null? set) false)
((equal? x (car set)) true)
(else (element-of-set? x (cdr set)))))
;; Delete duplicated elements of a list (set)
(define make-set
(lambda (lst)
(cond ((null? lst) '())
((if (list? (car lst))
(cond ((null? (car lst))
'()
)
((element-of-set? (caar lst) (car lst)) (make-set (cdar lst))
)
(else (cons (caar lst) (make-set cadr lst))))
(cond ((element-of-set? (car lst) (cdr lst)) (make-set (cdr lst)))
(else (cons (car lst) (make-set (cdr lst))))))))))
Большое спасибо за вашу помощь. Я очень это ценю. – simpan
Это удовольствие! – Renzo