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

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

28.11.2015, 08:47. Показов 1606. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В списке L из каждой группы подряд идущих равных элементов оставить только один элемент
Например, 2 2 1 1 3 3, после введения в программу останется: 2 1 3
Помогите пожалуйста решить задачу!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2015, 08:47
Ответы с готовыми решениями:

В списке L оставить только первое вхождение группы одинаковых элементов
Здравствуйте. Помогите пожалуйста решить задачу: В списке L оставить только первое вхождение...

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

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

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

5
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
28.11.2015, 10:18 2
Lisp
1
2
3
4
5
6
7
(defun compress (w &optional b)
  (cond ((null w) nil)
        ((equal (car w) b) (compress (cdr w) b))
        ((cons (car w) (compress (cdr w) (car w))))))
 
> (compress '(a a b c c c d e e))
(A B C D E)
Добавлено через 41 секунду
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun compress (w)
  (cond ((null w) nil)
        ((equal (car w) (cadr w)) (compress (cdr w)))
        ((cons (car w)
               (labels ((press (w b)
                          (cond ((null w) nil)
                                ((equal (car w) b) (press (cdr w) b))
                                ((cons (car w)
                                       (press (cdr w) (car w)))))))
                 (press (cdr w) nil))))))
 
> (compress '(nil nil nil a a b c nil nil nil c c d e e nil nil nil))
(NIL A B C NIL C D E NIL)
Добавлено через 19 секунд
Lisp
1
2
3
4
5
6
7
8
9
(defun compress (w &optional b f)
  (cond ((null w) nil)
        (f (if (equal (car w) b)
               (compress (cdr w) b t)
               (cons (car w) (compress (cdr w) (car w) t))))
        ((cons (car w) (compress (cdr w) (car w) t)))))
 
> (compress '(nil nil nil a a b c nil nil nil c c d e e nil nil nil))
(NIL A B C NIL C D E NIL)
Добавлено через 18 секунд
Lisp
1
2
3
4
5
6
7
(defun compress (w &optional b f)
  (cond ((null w) nil)
        ((and f (equal (car w) b)) (compress (cdr w) b t))
        ((cons (car w) (compress (cdr w) (car w) t)))))
 
> (compress '(nil nil nil a a b c nil nil nil c c d e e nil nil nil))
(NIL A B C NIL C D E NIL)
Добавлено через 57 минут
Lisp
1
2
3
4
5
6
7
(defun sine-adjacent (w &optional b)
  (cond ((null w) nil)
        ((eq b (car w)) (sine-adjacent (cdr w) b))
        ((cons (car w) (sine-adjacent (cdr w) (car w))))))
 
> (sine-adjacent '(1 2 3 3 4 5 4 4 3 1 1 1))
(1 2 3 4 5 4 3 1)
Добавлено через 14 секунд
Lisp
1
2
3
4
5
6
7
8
(defun sine-adjacent (w &optional b)
  (when w (if (eq b (car w))
              (sine-adjacent (cdr w) b)
              (cons (car w)
                    (sine-adjacent (cdr w) (car w))))))
 
> (sine-adjacent '(1 2 3 3 4 5 4 4 3 1 1 1))
(1 2 3 4 5 4 3 1)
Добавлено через 16 секунд
Lisp
1
2
3
4
5
6
7
defun sine-adjacent (w &optional b ac)
  (cond ((null w) (reverse ac))
        ((eq b (car w)) (sine-adjacent (cdr w) b ac))
        ((sine-adjacent (cdr w) (car w) (cons (car w) ac)))))
 
> (sine-adjacent '(1 2 3 3 4 5 4 4 3 1 1 1))
(1 2 3 4 5 4 3 1)
Добавлено через 27 секунд
Lisp
1
2
3
4
5
6
7
(defun sine-adjacent (w &optional ac)
  (cond ((null w) (reverse ac))
        ((eq (car w) (cadr w)) (sine-adjacent (cdr w) ac))
        ((sine-adjacent (cdr w) (cons (car w) ac)))))
 
> (sine-adjacent '(1 2 3 3 4 5 4 4 3 1 1 1))
(1 2 3 4 5 4 3 1)
Добавлено через 28 секунд
Lisp
1
2
3
4
5
6
7
8
(defun sine-adjacent (w)
  (when w (if (eq (car w) (cadr w))
              (sine-adjacent (cdr w))
              (cons (car w)
                    (sine-adjacent (cdr w))))))
 
> (sine-adjacent '(1 2 3 3 4 5 4 4 3 1 1 1))
(1 2 3 4 5 4 3 1)
Добавлено через 5 минут
Lisp
1
2
3
4
5
6
7
8
(defun sine-adjacent (w)
  (cons (car w)
        (loop for a in w
              for b in (cdr w)
              unless (equalp a b) collect b)))
 
> (sine-adjacent '(1 2 3 3 4 5 4 4 3 1 1 1))
(1 2 3 4 5 4 3 1)
2
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
28.11.2015, 17:20 3
Lisp
1
2
3
4
5
;; racket-lang.org
(define (foo lst)
  (cons (first lst)
        (for/list ((i lst) (j (rest lst)) #:unless (eq? i j))
          j)))
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36587 / 20317 / 4218
Регистрация: 12.02.2012
Сообщений: 33,614
Записей в блоге: 13
28.11.2015, 22:18 4
HomeLisp, iter:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun task (lst)
 (let ((res nil)) 
  (iter (for i in lst) (for j in (cdr lst)) 
     (unless (eq i j) (collecting i into res))) 
  (append res (last lst))))
 
==> task
 
(task '(1 2 3 3 4 5 4 4 3))
 
==> (1 2 3 4 5 4 3)
 
(task '(1 2 3 3 4 5 4 4 3 1 1 1))
 
==> (1 2 3 4 5 4 3 1)
2
1 / 1 / 0
Регистрация: 09.04.2015
Сообщений: 21
01.12.2015, 19:08  [ТС] 5
Извините, а что есть &optional ?

Добавлено через 2 минуты
Извините, а как это же написать с помощью простых операторов типа cdr, car и т.д. ?
Без итераций, фор, анлесс и аппенд.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36587 / 20317 / 4218
Регистрация: 12.02.2012
Сообщений: 33,614
Записей в блоге: 13
02.12.2015, 11:58 6
jack_sparrow228, тебе же _sg кучу таких решений предложил.
1
02.12.2015, 11:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2015, 11:58
Помогаю со студенческими работами здесь

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

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

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

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


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

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

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