Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 35
1

Удалить элементы первого списка по номерам второго списка без использования вспомогательных функций

05.12.2015, 16:08. Показов 1344. Ответов 10
Метки lisp (Все метки)

Author24 — интернет-сервис помощи студентам
Может кто знает классический вид функции удаление элементов списка по номерам второго списка.Важно то,что нельзя использовать вспомогательные функции и циклы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2015, 16:08
Ответы с готовыми решениями:

Удалить из второго списка все вхождения головы первого списка
2. Даны 2 списка. Удалить из второго все вхождения головы первого списка.

Удалить элементы первого списка из второго(т.е. те которые совпадают),написать через рекурсию
дано два списка (L1 L2),нужно удалить элементы первого списка из второго(т.е. те которые...

Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка.
Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка....

Даны два списка. Каждый элемент первого списка ассоциативно связан соответствующим элементом второго списка
Помогите пожалуйста Даны два списка: список студентов и список их успеваемости. Каждый элемент...

10
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
05.12.2015, 16:45 2
Lisp
1
2
3
4
5
6
7
8
(defun drop-index (w v &optional (n 0))
  (cond ((null w) nil)
        ((null v) w)
        ((= (car v) n) (drop-index (cdr w) (cdr v) (1+ n)))
        ((cons (car w) (drop-index (cdr w) v (1+ n))))))
 
> (drop-index '(a b c d e) '(1 2 4))
(A D)
Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
7
(defun drop-index (w v &optional (n 0))
  (cond ((or (null w) (null v)) w)
        ((= (car v) n) (drop-index (cdr w) (cdr v) (1+ n)))
        ((cons (car w) (drop-index (cdr w) v (1+ n))))))
 
> (drop-index '(a b c d e) '(1 2 4))
(A D)
3
1017 / 963 / 151
Регистрация: 10.08.2015
Сообщений: 5,160
05.12.2015, 19:30 3
еще вариант
Lisp
1
2
3
4
5
6
(defun drop (v w)
  (cond
    ((null w) nil)
    ((null v) w)
    ((zerop (car v)) (drop (mapcar '1- (cdr v)) (cdr w)))
    ((cons (car w) (drop (mapcar '1- v) (cdr w))))))
4
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
05.12.2015, 20:02 4
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;; racket-lang.org
(define (foo lst indexes)
  (let loop ((lst lst)
             (index 0)
             (indexes (sort indexes <)))
    (let/cc return
      (when (or (null? indexes) (null? lst))
        (return lst))
      (when (= index (first indexes))
        (return (loop (rest lst) (add1 index) (rest indexes))))
      (return (cons (first lst) (loop (rest lst) (add1 index) indexes))))))
 
 
(define (bar lst indexes)
  (let ((counter -1))
    (for/list ((i lst)
               #:unless (and (eq? (void) (set! counter (add1 counter)))
                             (member counter indexes)))
      i)))
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
37291 / 20725 / 4272
Регистрация: 12.02.2012
Сообщений: 34,111
Записей в блоге: 14
05.12.2015, 21:07 5
_sg, Ваш код требует, чтобы список позиций удаляемых элементов был отсортирован. В противном случае код работает некорректно...

Вот "крокодил", который не требует упорядочения списка позиций (и нечувствителен к повторениям в этом списке):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun dd (lst pl &optional (f nil) (c 0) (tmp nil) (res nil))
  (cond ((null f)  
           (cond ((null lst) (dd nil nil t 0 tmp nil))
                 ((member c pl) (dd (cdr lst) pl nil (+ c 1) (cons (list (car lst) t) tmp)))
                 (t (dd (cdr lst) pl nil (+ c 1) (cons (list (car lst) nil) tmp)))))
        (t (cond ((null tmp) res)
                 ((cadar tmp) (dd nil nil t 0 (cdr tmp) res))
                 (t (dd nil nil t 0 (cdr tmp) (cons (caar tmp) res)))))))
 
==> dd
 
(dd '(a b c d e) '(2 1 1 1 4))
 
==> (a d)
3
1056 / 950 / 109
Регистрация: 04.11.2012
Сообщений: 990
05.12.2015, 21:41 6
Lisp
1
2
3
4
5
(defun del-items (seq i &optional (c 0))
  (cond
    ((null seq) ())
    ((member c i) (del-items (cdr seq) i (1+ c)))
    (t (cons (car seq) (del-items (cdr seq) i (1+ c))))))
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
37291 / 20725 / 4272
Регистрация: 12.02.2012
Сообщений: 34,111
Записей в блоге: 14
05.12.2015, 21:47 7
Lambdik, класс!!!
1
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
06.12.2015, 09:20 8
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun drop-index (w v)
  (drop w (sort (copy-list v) #'<)))
 
(defun drop (w v &optional (n 0))
  (cond ((or (null w) (null v)) w)
        ((= (car v) n) (drop (cdr w) (cdr v) (1+ n)))
        ((cons (car w) (drop (cdr w) v (1+ n))))))
 
> (drop-index '(a b c d e) '(1 2 4))
(A D)
> (drop-index '(a b c d e) '(4 1 2))
(A D)
Добавлено через 12 секунд
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun drop-index (w v)
  (drop w (sort (copy-list v) #'<)))
 
(defun drop (w v &optional ac (n 0))
  (if (or (null w) (null v))
      (append (nreverse ac) w)
      (drop (cdr w)
            (if (= (car v) n) (cdr v) v)
            (if (= (car v) n) ac (cons (car w) ac))
            (1+ n))))
 
> (drop-index '(a b c d e) '(1 2 4))
(A D)
> (drop-index '(a b c d e) '(4 1 2))
(A D)
2
1017 / 963 / 151
Регистрация: 10.08.2015
Сообщений: 5,160
06.12.2015, 16:06 9
Lisp
1
2
3
4
5
6
7
(defun drop (v w &optional (n 0)
                 &aux (q (cdr w))
                      (m (1+ n)))
  (cond
    ((some 'null (list v w)) w)
    ((find n v) (drop (remove n v) q m))
    ((cons (car w) (drop v q m)))))
2
0 / 0 / 2
Регистрация: 26.01.2011
Сообщений: 96
09.12.2018, 12:30 10
А как сделать то же самое, но при условии что нумерация элементов начинается с 1?
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
09.12.2018, 17:04 11
Lisp
1
2
3
4
5
6
7
8
9
10
(defun drop-index (w v)
  (drop w (sort (copy-list v) #'<)))
 
(defun drop (w v &optional (n 1))
  (cond ((or (null w) (null v)) w)
        ((= (car v) n) (drop (cdr w) (cdr v) (1+ n)))
        ((cons (car w) (drop (cdr w) v (1+ n))))))
 
> (drop-index '(a b c d e) '(2 3 5))
(A D)
2
09.12.2018, 17:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2018, 17:04
Помогаю со студенческими работами здесь

Заданы три списка. Удалить из первого списка все элементы остальных списков
Помогите пожалуйста, мне нужно сессию досрочно сдать( в роддом надо) а практика только началась, а...

Инверсия списка без использования стандартных функций
Вообщем задание очень простое, на входе дан список типа int на выходе тоже, нужно сделать инверсию....

Поменять местами первый элемент первого списка с последним элементом второго списка
Здравствуйте, вот такое задание : Поменять местами первый элемент первого списка с последним...

Вставить после каждого нечетного элемента первого списка наибольший элемент второго списка
Сформировать два списка из N целочисленных случайных элементов (N – вводится пользователем, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru