0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 35
1

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

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

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

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

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

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

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

10
4664 / 4360 / 377
Регистрация: 12.05.2012
Сообщений: 3,076
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
606 / 839 / 142
Регистрация: 10.08.2015
Сообщений: 4,240
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
33208 / 18526 / 3904
Регистрация: 12.02.2012
Сообщений: 31,122
Записей в блоге: 12
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
1046 / 940 / 107
Регистрация: 04.11.2012
Сообщений: 972
Записей в блоге: 3
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
33208 / 18526 / 3904
Регистрация: 12.02.2012
Сообщений: 31,122
Записей в блоге: 12
05.12.2015, 21:47 7
Lambdik, класс!!!
1
4664 / 4360 / 377
Регистрация: 12.05.2012
Сообщений: 3,076
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
606 / 839 / 142
Регистрация: 10.08.2015
Сообщений: 4,240
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
4664 / 4360 / 377
Регистрация: 12.05.2012
Сообщений: 3,076
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2018, 17:04
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru