Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lisp
Войти
Регистрация
Восстановить пароль
 
AleksandrDoom
0 / 0 / 0
Регистрация: 21.03.2017
Сообщений: 20
1

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

Сегодня, 00:33. Просмотров 60. Ответов 2
Метки нет (Все метки)

Дан список. Определить функцию для циклического сдвига списка вправо на один элемент. Использовать только базис Лиспа. Самым простым вариантом путем рекурсии нельзя использовать различные встроенные методы типа last и butlast и др. Например: если дано "(1 2 3 4 5)", ответом будет "(5 1 2 3 4)" Помогите пожалуйста!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
Сегодня, 00:33
Ответы с готовыми решениями:

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

Определить функцию , удаляющую из списка все элементы, входящие в список ровно один раз
Здравствуйте!!!!Помогите,пожалуйста решить задачу.Трудновато с Лиспом((( 1)Определить функцию ,...

Определить рекурсивную функцию, возвращающую последний элемент списка
Определить рекурсивную функцию, возвращающую последний элемент списка. вот что сделано (defun...

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

Определить функцию (reduction x), уменьшающую каждый элемент списка x
2.Определить функцию reduction(x), которая преобразует список целых чисел x в список, каждый из...

2
Catstail
Модератор
23847 / 11905 / 2094
Регистрация: 12.02.2012
Сообщений: 19,350
Сегодня, 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
_sg
3883 / 3664 / 254
Регистрация: 12.05.2012
Сообщений: 2,555
Сегодня, 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
Сегодня, 09:05

Определить функцию, которая имеет значение T, если n-й элемент списка L есть атом.
Для каждого из следующих условий определить функцию одного аргумента L , которая имеет значение T ,...

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

Определить функцию для преобразования списка по принципу
Определить функцию для преобразования списка по принципу : (A B C) -> (((A)B)C)


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru