Схема удаления списка - PullRequest
       6

Схема удаления списка

1 голос
/ 02 декабря 2011

Я нашел содержимое этой темы весьма полезным! Как удалить элемент из списка в схеме

Я протестировал рекомендованный код, и кажется, что он удаляет один элемент при первом и единственном появлении в списке.

Скажем, вместо этого я хотел, чтобы все вхождения элемента из списка.Или даже далее, если бы я хотел указать список элементов вместо элемента, который нужно удалить.

Например, если у меня была функция с именем removelist, которая принимала два списка в качестве параметров

(define (removelist L M))

> (removelist '(1 2 2 3 4 5 2 2 5 6 7 8 9) '(1 2))
> '(3 4 5 5 6 7 8 9)

Надеюсь, что это имеет смысл.

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Здесь простая функция, которая использует filter и member для достижения этой цели:

(define (remove-list l m)
 (filter (lambda (element)
          (not (member element m)))
  l))

Вот результаты:

> (remove-list '(1 2 2 3 4 5 2 2 5 6 7 8 9) '(1 2))
  (3 4 5 5 6 7 8 9)
> (remove-list '(1 2 2 3 4 5 2 2 5 6 7 8 9) '(1 2 1))
  (3 4 5 5 6 7 8 9)

Для этого фрагмента требуется srfi-1. Надеюсь, это поможет.

С уважением,
Matt

0 голосов
/ 05 декабря 2011

Использование простой рекурсии и отсутствие встроенных функций, таких как фильтр или член:

(define (filter_out m l)
  (cond ( (null? l) '() )
        ( (equal? (car l) m) (filter_out m (cdr l)) )
        ( else (cons (car l)  (filter_out m (cdr l))) )
        ))

Тест:

(filter_out 'jay (list 'jay 'z 'jay 'dilla 'jay 'electro))
(filter_out '(jay z) (list '(jay z) '(jay dilla) 'jay '(electro)))

Если вы заинтересованы в изучении этого типа кодирования, проверьтеиз "Маленький интриган".Чтение занимает всего несколько часов, и после прочтения вы станете мастером рекурсии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...