Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 4

Вставить новый элемент после каждого вхождения указанного элемента

08.12.2011, 19:55. Показов 1834. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По заданию необходимо вставить новый элемент после каждого вхождения указанного элемента.
есть вариант сделать так, но выскакивает ошибка.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun foo (lst x n) 
  (cond 
    ((zerop n) (cons x lst)) 
    (T (cons (car lst) (foo (cdr lst) x (1- n)))))) 
 
 
(defun lis (N L CurPos)
  (if (null L)
      nil
       (if (= N (first L))
      (cons CurPos (lis N  (rest L) (+ CurPos 1)))
          (foo L CurPos 99)
           (lis N (rest L) (+ CurPos 1))
      )) 
 )
посоветуйте что делать
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.12.2011, 19:55
Ответы с готовыми решениями:

Вставить элемент в спсиок после первого вхождения заданного элемента
(defun insert_after_x(l x y) (if (= x (car l)) (rplacd l (nconc (list y) (cdr l))) ...

Вставить в список L новый элемент F после каждого элемента E
Составить программу, которая вставляет в список L новый элемент F за каждым вхождением элемента E.

После каждого четного элемента последовательности, кратного X, вставить новый элемент
У меня 2 вопроса:Вот условия задачи Даны две последовательности целых чисел. В первой последовательности после каждого четного элемента,...

7
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
08.12.2011, 20:07
Lisp
1
2
3
4
5
6
7
8
(defun f (l old new)
           (if (null l) ()
               (if (eql old (car l)) 
                   (cons old (cons new (f (cdr l) old new)))
                   (cons (car l) (f (cdr l) old new)))))
 
(f '(a s d a s d a s d) 'a 'z)
(A Z S D A Z S D A Z S D)
2
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 4
08.12.2011, 20:11  [ТС]
Спасибо!
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
08.12.2011, 20:13
с обработкой подсписков
Lisp
1
2
3
4
5
6
7
8
9
10
(defun f (l old new)
           (if (null l) ()
               (if (consp (car l)) (cons (f (car l) old new)
                                         (f (cdr l) old new))
                   (if (eql old (car l)) 
                       (cons old (cons new (f (cdr l) old new)))
                       (cons (car l) (f (cdr l) old new))))))
 
(f '(a (a (a (a a) (a a) a) a) a) 'a 'z)
(A Z (A Z (A Z (A Z A Z) (A Z A Z) A Z) A Z) A Z)
1
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 4
15.12.2011, 22:36  [ТС]
В ходе разбора функции возник вопрос: можно ли аналогично выполнить это задание не создавая новый список, а модифицируя начальный?
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
16.12.2011, 10:41
ну к примеру так
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(setf ll '(a s d a s d a s d))
(A S D A S D A S D)
 
CL-USER> (defun f (l old new)
           (if l
               (if (eql (car l) old)
                   (f (cddr (rplacd l (cons new (cdr l)))) 
                      old new)
                   (f (cdr l) old new))))
 
CL-USER> (f ll 'a 'z)
NIL
CL-USER> ll
(A Z S D A Z S D A Z S D)
Добавлено через 17 минут
или так
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(defun f (l old new)
           (if (null (cdr l)) (rplaca (rplacd l (cdar l)) (caar l))
               (if (atom (car l))
                   (if (eql (car l) old)
                       (f (rplaca l (list (car l) new)) old new)
                       (f (rplaca l (list (car l))) old new))
                   (if (eql (car (last (car l)))
                            (cadr l))
                       (f (rplacd (rplaca l (nconc (car l) (list new)))
                                  (cddr l)) old new)
                       (f (rplacd (rplaca l (nconc (car l) (list (cadr l))))
                                  (cddr l)) old new)))))
 
CL-USER> (setf ll '(a s d a s d a s d))
(A S D A S D A S D)
 
CL-USER> (f ll 'a 'z)
(A Z S D A S D A S D)
 
CL-USER> ll
(A Z S D A S D A S D)
Добавлено через 11 минут
не, последнее сообщение не верное

Добавлено через 8 минут
вот так
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun f (l old new)
           (flet ((f-hel (new old par)
                    (f (rplacd (rplaca l (nconc (car l) par))
                       (cddr l)) old new)))
             (if (null (cdr l)) (rplaca (rplacd l (cdar l)) (caar l))
                 (if (atom (car l))
                     (if (eql (car l) old)
                         (f (rplaca l (list (car l) new)) old new)
                         (f (rplaca l (list (car l))) old new))
                     (if (eql (car (last (car l)))
                              old)
                         (f-hel new old (list new))
                         (f-hel new old (list (cadr l))))))))
Добавлено через 13 минут
опять не верно, ладно, бери этот вариант и не парься, а я спать
Lisp
1
2
3
4
5
6
CL-USER> (defun f (l old new)
           (if l
               (if (eql (car l) old)
                   (f (cddr (rplacd l (cons new (cdr l)))) 
                      old new)
                   (f (cdr l) old new))))
Добавлено через 10 минут
не, спать я не ушёл, а вот теперь всё верно
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(setf ll '(a s d a s d a s d))
(A S D A S D A S D)
 
CL-USER> (defun f (l old new)
           (flet ((f-hel-1 (new old par)
                    (f (rplacd (rplaca l (nconc (car l) par))
                               (cddr l)) old new))
                  (f-hel-2 (new old &optional new_)
                    (f (rplaca l (list (car l) new_)) old new)))
             (if (null (cdr l)) 
                 (rplaca (rplacd l (cdar l)) (caar l))
                 (if (atom (car l))
                     (if (eql (car l) old)
                         (f-hel-2 new old new)
                         (f-hel-2 new old))
                     (if (eql (car (last (car l))) old)
                         (f-hel-1 new old (list new (cadr l)))
                         (f-hel-1 new old (list (cadr l))))))))
 
CL-USER> (f ll 'a 'z)
(A Z S D A Z S D A Z S D)
CL-USER> ll
(A Z S D A Z S D A Z S D)
1
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 4
16.12.2011, 10:50  [ТС]
)))Огромное спасибо! очень помог!
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
28.01.2013, 16:57
Lisp
1
2
3
4
5
6
7
8
(defun task (lst el new)
  (apply 'append (mapcar #'(lambda (x) (if (eq x el) (list el new) (list x))) lst)))
 
==> task
 
(task '(a s d f g h a s d f g h) 's  111)
 
==> (a S 111 d f g h a S 111 d f g h)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.01.2013, 16:57
Помогаю со студенческими работами здесь

Изъять из списка L после каждого вхождения элемента E1 следующий элемент
Уважаемые мастера, прошу помощи в создании программы до динамическим структурам, т.к. вообще ничего в них не понимаю. Разработать...

Вставить после данного элемента списка новый элемент, и вывести указатель на добавленный элемент
Дано число D и указатель Р0 на один из элементов пустая двозвязного списка. Вставить после данного элемента списка новый элемент со...

Описать процедуру, которая вставляет в список L новый элемент Е1 после первого вхождения элемента E
Здраствуйте. type te =…; {тип элементов списка} {выбирается по желанию} список = ^звено; ...

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

Вставить элемент 100 до и после каждого отрицательного элемента
Вставить элемент 100 до и после каждого отрицательного элемента. Прошу, свое решение не писать, постараться внести изменения в мой. ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru