Карта0
Карта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
Карта27
Карта28
Карта29
Карта30
Карта31
Карта32
Карта33
Карта34
Карта35
Карта36
Карта37
Карта38
Карта39


Наш форум » Железо и софт. Вопросы и ответы. » Программирование » muLisp. Циклическая перестановка элементов списка.

Ответ
Старый 27.05.2010, 12:33   #1 (permalink)
Новичок
 
У меня нет аватара
 
Регистрация: 09.01.2008
Сообщений: 17
Репутация: 4
muLisp. Циклическая перестановка элементов списка.


Только начал знакомиться с языком Lisp. Требуется сделать несколько заданий по поводу циклической перестановки элементов списка. Наверное, задача простая, прошу прощения за тупые вопросы, помогите плиз. Компилятор muLisp. А задания следующие:
1) организовать перестановку с помощью простой рекурсии без обработки подсписков
Пример: (a b c d)->(d a b c)
Не совсем понимаю зачем здесь вообще нужна рекурсия, но преп требует. Мой вариант (первое, что пришло на ум)
Код:
(Defun EndFirst (S kolvo) 

                     (Cond ((ATOM S) 'incorrect_argument)

					       ((NOT (Cdr S)) S)

					       ((NOT (= 0 kolvo)) (EndFirst (Append (Last S) (SubList S 0 (- (Length S) 2))) (- kolvo 1)))						   

						   (t S)

                     )

)
Здесь параметр kolvo отвечает за количество перестановок. Вопрос: как можно реализовать это задание с использованием просто рекурсии, но без этого самого kolvo?
2) организовать перестановку с обработкой подсписков
Пример: ((a b) c (d e f) -> ((f d e) (b a) c)
Мой вариант:
Код:
(Defun EndFirst2 (S kolvo)
                     (Cond ((ListP (Car S)) (Endfirst (Cons (EndFirst (Car S) kolvo) (EndFirst2 (Cdr S) kolvo)) kolvo))                   		    		 
					       (t (EndFirst S kolvo))						   
					 )
)
Работает неправильно. Опять же можно ли обойтись без kolvo?

3) Определить функцию, осуществляющую все циклические перестановки элементов в списке. Сделать при помощи рекурсии.
Пример: ((a b) (c d)), ((b a) (c d)), ((a b) (d c)) и т. д.
4) Задание как в 3-ем пункте, но сделать с помощью цикла Loop.
Помогите, пожалуйста.
RUSLAN555 вне форума   Ответить с цитированием
Старый 28.05.2010, 04:02   #2 (permalink)
Новичок
 
У меня нет аватара
 
Регистрация: 09.01.2008
Сообщений: 17
Репутация: 4


вроде справился с заданиями 1 и 2.
вот мои варианты на случай, если кому-нибудь понадобятся.
1)

Код:
(Defun endfirst (S x)
                     (Cond ((NOT (Cdr S)) (Cons (Car S) x))
					       ((NULL x) (endfirst (Cdr S) (Cons (Car S) Nil)))
					       (t (endfirst (Cdr S) (Append x (Cons (Car S) Nil))))
                     )
)

(Defun ef (S) 
            (endfirst S Nil)
)
2)
Код:
(Defun endfirst (S x)
                     (Cond ((AND (NOT (Cdr S)) (ATOM (Car S))) (Cons (Car S) x))
					       ((AND (NOT (Cdr S)) (NOT (ATOM (Car S)))) (Cons (endfirst (Car S) Nil) x))
					       ((AND (NULL x) (ATOM (Car S))) (endfirst (Cdr S) (Cons (Car S) Nil)))
						   ((AND (NULL x) (NOT (ATOM (Car S)))) (endfirst (Cdr S) (Cons  (endfirst (Car S) Nil) Nil)))
						   ((ATOM (Car S)) (endfirst (Cdr S) (Append x (Cons (Car S) Nil))))
					       (t (endfirst (Cdr S) (Append x (Cons (endfirst (Car S) Nil) Nil))))
                     )
)

(Defun ef (S) 
            (endfirst S Nil)
)
что делать с 3 и 4 пока не придумал. может кто-то натолкнет на мысль хотя бы?
RUSLAN555 вне форума   Ответить с цитированием
Старый 28.05.2010, 08:36   #3 (permalink)
Местный
 
Аватар для Grand Father
 
Регистрация: 03.03.2007
Адрес: Москва, Люблино
Возраст: 33
Сообщений: 946
Репутация: 132
Провайдер: Другой


Я не знаю в Рязани ни одного человека, который программирует на Lisp.
Grand Father вне форума   Ответить с цитированием
Старый 28.05.2010, 09:31   #4 (permalink)
Новичок
 
У меня нет аватара
 
Регистрация: 09.01.2008
Сообщений: 17
Репутация: 4


Да собсна и не собираюсь как-то связывать свою дальнейшую жизнь с ним, просто лабы надо сделать. В радике учусь.
RUSLAN555 вне форума   Ответить с цитированием
Старый 28.05.2010, 10:47   #5 (permalink)
Местный
 
Аватар для Grand Father
 
Регистрация: 03.03.2007
Адрес: Москва, Люблино
Возраст: 33
Сообщений: 946
Репутация: 132
Провайдер: Другой


Да это понятно. Я имел в виду
Цитата:
вот мои варианты на случай, если кому-нибудь понадобятся.
Grand Father вне форума   Ответить с цитированием
Старый 28.05.2010, 20:23   #6 (permalink)
Новичок
 
У меня нет аватара
 
Регистрация: 09.01.2008
Сообщений: 17
Репутация: 4


sp0_of, спасибо за совет. Собсна уже сдал, так что надобности в функции на Common Lisp нет. А преподают всего один семестр на ФВТ, 3-ий курс, 43-я группа. Преподает Парфилова Надежда Ивановна.

Последний раз редактировалось RUSLAN555, 28.05.2010 в 20:26.
RUSLAN555 вне форума   Ответить с цитированием
Старый 29.05.2010, 16:32   #7 (permalink)
Новичок
 
У меня нет аватара
 
Регистрация: 09.01.2008
Сообщений: 17
Репутация: 4


Возник еще один вопрос. Необходимо определить функцию, возвращающую номер последнего вхождения элемента a в список L. надо реализовать двумя способами: использованием рекурсии и цикла Loop. Проблема опять же в обработке подсписков. Необходимо сделать, чтобы подсписки тоже учитывались. То есть по вызову (ln '(a (a b) a (b a) v) 'a) функция должна возвращать 6. Прошу, помогите чайнику пожалуйста.
Смог сделать только без обработки подсписков:
Код:
(defun ln (L a)
   (lastnum L a 0) 
)
 
(defun lastnum (L a x)
                (Cond ((NOT (Member a L)) x)
                                      ((Member a L) (lastnum (Cdr (Member a L)) a (+ x (- (Length L) (Length (Member a L))) 1)))
                )               
)
RUSLAN555 вне форума   Ответить с цитированием
Старый 29.05.2010, 20:44   #8 (permalink)
Местный
 
Аватар для Grand Father
 
Регистрация: 03.03.2007
Адрес: Москва, Люблино
Возраст: 33
Сообщений: 946
Репутация: 132
Провайдер: Другой


ОМГ! Лисп и Ада - два языка, которые активно используют американцы. Do you speak english? Did you find a russian secret objects?
Grand Father вне форума   Ответить с цитированием
Старый 29.05.2010, 22:53   #9 (permalink)
Новичок
 
У меня нет аватара
 
Регистрация: 09.01.2008
Сообщений: 17
Репутация: 4


Спасибо!)
RUSLAN555 вне форума   Ответить с цитированием
Ответ

Тэги
mulisp., перестановка, списка., циклическая, элементов




Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.



электрические тали москва .
При копировании информации ссылка на источник обязательна!

Часовой пояс GMT +4, время: 04:27.
vBulletin® Version 3.8.2.Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot
Template-Modifications by TMS