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

Циклическая перестановка последнего элемента списка в начало

26.11.2014, 15:32. Показов 1844. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
И еще одно задание:
Требуется выполнить заданное число раз циклическую перестановку элементов заданного числового списка. Под циклической перестановкой элементов списка понимается перемещение последнего элемента списка в его начало: (1 2 3 4 5 6) → (6 1 2 3 4 5).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2014, 15:32
Ответы с готовыми решениями:

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

Циклическая перестановка элемнтов
Доброго времени суток. Уважаемы знатоки, данного языка программирования, прошу помочь разобраться в этом задании, есть кое-какие найденные...

Списки - удалить начало списка до заданного элемента X (включительно)
помогите плиз Удалить начало списка до заданного элемента X (включительно).

8
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
26.11.2014, 16:19
школьный подход
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
26
;; racket-lang.org
(define (last lst)
  (if (null? (cdr lst))
      (car lst)
      (last (cdr lst))))
 
(define (take-sub1 lst)
  (if (null? (cdr lst))
      null
      (cons (car lst) (take-sub1 (cdr lst)))))
 
(define (shr-cycle lst)
  (cons (last lst) (take-sub1 lst)))
 
(define (task n lst)
  (unless (and (integer? n) (>= n 0)) lst)
  (unless (list? lst) lst)
  (if (or (null? lst) (null? (cdr lst)))
      lst
      (let loop ((n n) (lst lst))
        (if (zero? n)
            lst
            (loop (sub1 n) (shr-cycle lst))))))
 
(task 3 '(1 2 3 4 5 6))
;'(4 5 6 1 2 3)
3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,704
Записей в блоге: 14
26.11.2014, 17:02
Common Lisp:

Lisp
1
2
3
4
5
6
7
8
(defun cycle-swap (lst n)
 (if (zerop n) lst (cycle-swap (append (cdr lst) (list (car lst))) (- n 1))))
 
==> cycle-swap
 
(cycle-swap '(1 2 3 4 5) 2)
 
==> (3 4 5 1 2)
Добавлено через 32 минуты
И тут поторопился... Крутил в другую сторону. Правильно так:

Lisp
1
2
3
4
5
6
7
8
(defun cycle-swap (lst n)
 (if (zerop n) lst (cycle-swap (append (last lst) (butlast lst)) (- n 1))))
 
==> cycle-swap
 
(cycle-swap '(1 2 3 4 5) 2)
 
==> (4 5 1 2 3)
3
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
26.11.2014, 17:16
Lisp
1
2
3
(defun f (lst n &aux (l (copy-list lst)) (len (length lst)))
            (setf (cdr (last l)) l)
            (subseq l n (+ n len)))
4
jm
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 19
26.11.2014, 17:36  [ТС]
Сastorsky, спасибо, но у меня AutoLisp (среда вроде бы Vital LISP for AutoCAD), и он ругается на NULL? ("no function definition: NULL?")

Добавлено через 10 минут
transformator.t , спасибо за решение, но у меня AutoLisp, там он ругается на "bad element in arguments list: (L (COPY-LIST LST))"
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
26.11.2014, 17:49
Цитата Сообщение от jm Посмотреть сообщение
спасибо, но у меня AutoLisp
изучаем алгоритм решения и пишем свою реализацию на своем диалекте.
1
jm
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 19
26.11.2014, 17:58  [ТС]
castorsky, спасибо за алгоритм)
0
 Аватар для _sg
4708 / 4403 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
26.11.2014, 18:50
Lisp
1
2
3
4
5
(defun rotate> (w n)
  (if (zerop n) w (rotate> (nconc (last w) (butlast w)) (1- n))))
 
> (rotate> '(1 2 3 4 5) 2)
(4 5 1 2 3)
Lisp
1
2
3
4
5
(defun rotate> (w n)
  (if (zerop n) w (rotate> (cons (car (last w)) (butlast w)) (1- n))))
 
> (rotate> '(1 2 3 4 5) 2)
(4 5 1 2 3)
Lisp
1
2
3
4
5
(defun rotate> (w n)
  (nconc  (last w n) (butlast w n)))
 
> (rotate> '(1 2 3 4 5) 2)
(4 5 1 2 3)
4
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
26.11.2014, 22:44
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun butlast (ls)
  (if (cdr ls)
      (cons (car ls) (butlast (cdr ls)))))
 
(defun Cycle (ls n)
  (cond
    ((null ls) ())
    ((= 0 n) ls)
    (t (Cycle (cons (last ls) (butlast ls)) (- n 1)))))
 
Command: (Cycle '(1 2 3 4 5 6 7 8) 2)
(7 8 1 2 3 4 5 6)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.11.2014, 22:44
Помогаю со студенческими работами здесь

Как проверить равенство первого и последнего элемента списка
Проверить равенство первого и последнего элемента списка

Циклическая перестановка N следующих подряд элементов в списке
Напишите функцию, осуществляющую циклическую перестановку N следующих подряд элементов в списке. Например, при N=3 и исходном списке (a b c...

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

Переставить элементы списка, удовлетворяющие некоторому предикату P, в начало списка
Можете помочь с заданием . Определите функцию (f s), которая в одноуровневом списке чисел s переставляет элементы, удовлетворяющие...

Перенос последнего элемента списка в начало
помогите с задачей данного типа: Написать программу переноса в начало списка его последнего элемента. программа должна работать так : ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru