> 1 <

Автор Сообщение

Иван

Members


Статус

1 сообщений

Где: Russia
Род занятий:
Возраст:

#782   2009-12-19 00:17 GMT+3 часа(ов)      
Народ, помогите пожалуйста... Тут такое дело. Надо было сделать котрольную по лиспу в университете, я проболел весь месяц и пропустил большую часть лекций, что-то знаю, но как сделать её понятия не имею... Друзья помочь ничем не могут (или не хотят) а от этой контрошки многое зависит. Осталось только просить помощи тут. Я понимаю что вам не до этого, но прошу вас по человечски, очень не хочется из-за какого-то гриппа вылететь из университета...((

Задача звучит так: Напишите функцию swap-first-last, которая переставляет в списке-аргументе первый и последний элементы. Заранее спасибо!!!

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#783   2009-12-19 12:17 GMT+3 часа(ов)      
(defun SWAP-FIRST-LAST (L)
(if L
((lambda (head tail)
(if tail
(if (cdr tail)
((lambda (result)
(cons (car result)
(cons (car tail)
(cdr result))))
(SWAP-FIRST-LAST (cons head (cdr tail))))
(cons (car tail) (cons head nil)))
L))
(car L)
(cdr L))))

Идея такая. Если список L пустой, возвращаем nil (это случай пустого списка), в противном случае «делим» его на первый элемент head и остаток списка tail, если tail пустой, то возвращаем список L целиком (это случай списка из одного элемента - здесь нечего менять местами), в противном случае если <в том числе уже> tail состоит из одного элемента, то присоединяем этот элемент спереди к <тут же> сконструированному списку с одним элементом head и это возвращаем (это случай списка из двух элементов или когда добрались до конца исходного списка и пора последний элемент «продвигать» в начало, что мы собственно и начали делать), в противном случае <то есть пока tail длинный> присоединяем head (то есть первый элемент исходного списка) спереди к остатку (без первого элемента) tail и это отправляем снова как аргумент в вызов той же функции SWAP-FIRST-LAST, а с результатом вызова result поступаем так - к остатку result спереди присоединяем первый элемент tail, а затем первый элемент result - и это возвращаем <на предыдущий уровень>
Получается, что на пути «вниз» самый первый элемент исходного списка все время оказывается первым элементом укорачиваемого списка и «движется вниз», а на обратном пути «наверх» самый последний элемент исходного списка все время оказывается первым элементом результата и «движется наверх».

gihar

Moderators


Статус

249 сообщений

Где: --- да вот он я? приехал уже из Катманду
Род занятий: конкретный
Возраст: 2

#784   2009-12-19 13:31 GMT+3 часа(ов)      
Привет Ваня.
Вот и я ознакомился с твоей тяжелой биографией ,
видимо ты сейчас лежишь в полукоматозном состянии , прикован к постели ,
а послание на этот форум , пишет под твою диктовку , добрая сиделка-медсестра,
или старенькая мама.
Скорее всего грипп доконает тебя окончательно еще до нового года(в этом году эпидемия наиболее опасная) , и ты уже не сможешь больше порадовать нас своими успехами в учебе.
Но пока ты жив рук с клавиатуры не опускай ,
и побольше лука ешь (там витамины) , жидкости тоже побольше.

Скажу еще что тот кто дал тебе сие задание видимо догадывался что ты долго не протянешь и решил таким способом облегчить твои страдания перед твоим воссоединением с вечностью.

(SETQ VECHNOST-and-VANYA (concatenate 'list "Vanya" ) )

;все что ты сможешь унести с собой это свое имя , незамысловатый универсальный идентификатор подареный тебе вечностью через твоих родителей(незабудь их поблагодарить)

Как у всего сущего у тебя Ваня есть начало , твоя альфа:

(setq Alpha-vanya (elt VECHNOST-and-VANYA 0) )

Даже не знаю как измерить тот короткий , но смелый и опасный жизненный путь
на который вечность нанизывала как бусинки , твои поступки и желания:

(setq length-path-vanya (length VECHNOST-and-VANYA))

но лишь шаг еще отделяет тебя от твоей цели:
(decf length-path-vanya)

И как хорошо , что сквозь туман агонии уже просматривается тот момент когда ты сделаешь свой последний , победный вздох и обретешь окончательное единство с Омегой :

(setq Omega-vanya (elt VECHNOST-and-VANYA length-path-vanya ) )

останется лишь окончательно растаться с иллюзиями и сделать так что бы
альфа стала омегой:
(setf (elt VECHNOST-and-VANYA 0) Omega-vanya)

а омега стала альфой:
(setf (elt VECHNOST-and-VANYA length-path-vanya) Alpha-vanya)

И пройзойдет великое разотождествление твоего имени и ты обретешь
пустоту смысла:
(#\a #\a #\n #\y #\V)


в конструкции defun:

( defun PUSTOTA ( NAME )
(setq Alpha-vanya (elt NAME 0) )
(setq length-path-vanya (length NAME))
(decf length-path-vanya)
(setq Omega-vanya (elt NAME length-path-vanya ) )
(setf (elt NAME 0) Omega-vanya)
(setf (elt NAME length-path-vanya) Alpha-vanya)

NAME
)
Это было точно последнее редактирование
> 1 <


Онлайн :

0 пользователь(ей), 61 гость(ей) :




Реклама на сайте: