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

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

09.12.2018, 00:33. Показов 1159. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дан список. Определить функцию для циклического сдвига списка вправо на один элемент. Использовать только базис Лиспа. Самым простым вариантом путем рекурсии нельзя использовать различные встроенные методы типа last и butlast и др. Например: если дано "(1 2 3 4 5)", ответом будет "(5 1 2 3 4)" Помогите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2018, 00:33
Ответы с готовыми решениями:

Написать программу для циклического сдвига списка на n-1 элементов влево
Здравствуйте, помогите написать программу на Lisp Написать программу для циклического сдвига...

Напишите функции для циклического сдвига слова влево и вправо
Нужно использовать SHL и SHR для сдвига? Не очень понятно как определить в какой момент нужно...

Функция циклического сдвига побитово вправо
Форумчане, приветствую! Подскажите почему не работает сдвиг вправо? Программа компилируется, но...

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

2
Модератор
Эксперт функциональных языков программированияЭксперт Python
37302 / 20736 / 4272
Регистрация: 12.02.2012
Сообщений: 34,127
Записей в блоге: 14
09.12.2018, 06:49 2
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(defun rev (lst r)
  (cond ((null lst) r)
        (t (rev (cdr lst) (cons (car lst) r)))))
 
==> REV
 
(rev '(1 2 3) nil)
==> (3 2 1)
 
(defun lrot (lst a)
  (cond ((null (cdr lst)) (cons (car lst) (rev a nil)))
        (t (lrot (cdr lst) (cons (car lst) a))))) 
 
==> LROT
 
(lrot '(1 2 3 4 5) nil)
==> (5 1 2 3 4)
 
(defun task (lst)
  (lrot lst nil))
 
==> TASK
 
(task '(1 2 3 4 5))
==> (5 1 2 3 4)
1
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
09.12.2018, 09:05 3
варианты:
Lisp
1
2
3
4
5
6
7
8
9
10
(defun shift-right-once
    (w &optional ac &aux (a (car w)) (d (cdr w)))
  (if d (shift-right-once d (cons a ac))
      (cons a (_reverse ac))))
 
(defun _reverse (w &optional ac)
  (if w (_reverse (cdr w) (cons (car w) ac)) ac))
 
> (shift-right-once '(1 2 3 4 5))
(5 1 2 3 4)
Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
7
(defun shift-right-once
    (w &optional ac &aux (a (car w)) (d (cdr w)))
  (if d (shift-right-once d (cons a ac))
      (cons a (nreverse ac))))
 
> (shift-right-once '(1 2 3 4 5))
(5 1 2 3 4)
Добавлено через 3 минуты
Lisp
1
2
3
4
5
(defun shift-left (w n) 
  (append (nthcdr n w) (subseq w 0 n)))
 
> (shift-left '(1 2 3 4 5) 1)
(2 3 4 5 1)
Добавлено через 3 минуты
Lisp
1
2
3
4
5
(defun shift-right (w n) 
  (append (last w n) (butlast w n)))
 
> (shift-right '(1 2 3 4 5) 1)
(5 1 2 3 4)
Добавлено через 1 минуту
Lisp
1
2
3
4
5
(defun shift-right (w n &aux (m (if (minusp n) 0 n)))
  (append (last w m) (butlast w m)))
 
> (shift-right '(1 2 3 4 5) 1)
(5 1 2 3 4)
Добавлено через 55 секунд
Lisp
1
2
3
4
5
6
7
(defun shift-right (w n)
  ((lambda (w m) 
     (append (last w m) (butlast w m)))
   w (if (minusp n) 0 n)))
 
> (shift-right '(1 2 3 4 5) 1)
(5 1 2 3 4)
Добавлено через 48 секунд
Lisp
1
2
3
4
5
6
(defun shift-right (w n)
  (let ((m (if (minusp n) 0 n)))
    (append (last w m) (butlast w m))))
 
> (shift-right '(1 2 3 4 5) 1)
(5 1 2 3 4)
1
09.12.2018, 09:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2018, 09:05
Помогаю со студенческими работами здесь

Вывести результат последовательного применения циклического сдвига вправо заданной последовательности k раз
Циклическим сдвигом вправо последовательности называется последовательность, получаемая из исходной...

Осуществление циклического сдвига элементов прямоугольной матрицы на n элементов вправо
помогите пожалуйста....

Получить результат циклического сдвига элементов списка на K позиций влево
Доброго времени суток. Не могли бы вы мне помочь решить несколько задач на прологе. Очень долго...

Матрицы: определить номера строк, совпадающих полностью или в результате циклического сдвига
Элементами целочисленной матрицы являются 0 или 1. Определить: - номера строк, совпадающих...


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

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