Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где_ошибка, Не работает программка 
V
    Опции темы
camakob
Дата 25.2.2009, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 8.1.2008

Репутация: нет
Всего: нет



Здравствуйте, товарищи !
В первый раз в жизни столкнулся с XLISP. Нашел в сети маленькую программку, запускаю на выполнение, она не работает. Подскажите в чем дело.

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

(defun swap-first-last (list)
  (let ((copy (copy-list list)))
    (rotatef (car copy) (car (last copy)))
    copy))

Ругается на copy-list. 
PM MAIL   Вверх
kosmonaFFFt
Дата 25.2.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Видимо нету такой функции в xlisp, только что проверил на sbcl - прекрасно работает.
Я бы сделал так:
Код

(defun swap-first-last (list)
           (let ((first-element (first list))
                 (last-element (first (last list)))
                 (last-list (last list)))
             (progn
               (rplaca last-list first-element)
               (rplaca list last-element))))

но эта функция изменяет переданный ей список...

Это сообщение отредактировал(а) kosmonaFFFt - 25.2.2009, 14:01


--------------------
user posted image
PM MAIL ICQ   Вверх
camakob
Дата 25.2.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 8.1.2008

Репутация: нет
Всего: нет



Спасибо за ответ, но в helpe функция есть:

Copy-list

Syntax : (copy-list <list>)

Copy the top level of a list. In file common.lsp
    <list>        the list

Returns : a copy of the list (new cons cells in top level)

Добавлено через 12 минут и 20 секунд
И если не сложно, еще одна маленькая задача:
Определите функцию (summa_digits n), результатом которой является сум-ма цифр натурального числа n.

Для  цифр, заданных списком, я нашел программку в книге "Мир Лиспа"(Хювенен, Сеппянен), а вот для цифр натурального числа мозгов не хватает, точнее мозгов хватает, но мозги пытаются программировать как в Паскале, но как говорят в Одессе, тут две большие разницы, то есть до недавнего времени я не подозревал, что есть такие языки программирования, все с ног на голову. 
PM MAIL   Вверх
VH_
Дата 25.2.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 182
Регистрация: 31.10.2006

Репутация: 10
Всего: 11



Действительно, в Help функция (copy-list) есть, но в примечании указано: "In file common.lsp", то есть в файле common.lsp, содержащем функции, определяемые для совместимости с Common LIsp. Вероятно, этот файл следует загрузить.
Код

(defun F (N)
 (if (< N 10) N
  ((lambda (reminder)
    (+ reminder (F (/ (- N reminder) 10))))
   (rem N 10))))

«...все с ног на голову...» - скорее наоборот, с головы на ноги: исключение лишнего.
PM MAIL   Вверх
kosmonaFFFt
Дата 25.2.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Писать за тебя не буду, ибо занят щас, но есть мысль - 
замутить строковое представление числа например с помощью
Код

(princ-to-string number)

потом нагуглить про работу со строками и создать список символов строки, выкинув оттуда
десятичную запятую, если она есть, а потом с этим списком можно сделать что угодно...
Создание списка символов строки можно вывести в отдельную функцию, а мб его можно
и не создавать и работать со строкой как с массивом...
Примерно так.
З. Ы. Пока писал все это VH_ уже все сделал, причем намного лучше, чем я предлагал... smile

Это сообщение отредактировал(а) kosmonaFFFt - 25.2.2009, 21:19


--------------------
user posted image
PM MAIL ICQ   Вверх
VH_
Дата 25.2.2009, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 182
Регистрация: 31.10.2006

Репутация: 10
Всего: 11



«...выкинув оттуда десятичную запятую, если она есть...» - «...сумма цифр натурального числа n...»
PM MAIL   Вверх
camakob
Дата 25.2.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 8.1.2008

Репутация: нет
Всего: нет



Спасибо за помощь товарищи, будем грызть гранит, правда еще меня ждут программирование(громко сказано) на Прологе, тоже первый раз сталкиваюсь, раньше слышал, что есть такой язык.
PM MAIL   Вверх
kosmonaFFFt
Дата 26.2.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Цитата(VH_ @ 25.2.2009,  22:04)
«...выкинув оттуда десятичную запятую, если она есть...» - «...сумма цифр натурального числа n...»

Мда... Еще со школы натуральные с рациональными (вроде так называются) путал...


--------------------
user posted image
PM MAIL ICQ   Вверх
_sg
Дата 25.4.2014, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 16.5.2007

Репутация: 2
Всего: 2



как ввариант:
Код

(defun sn (n)
  (apply #'+
         (mapcar #'parse-integer
                 (map 'list #'string (write-to-string n)))))

> (sn 54321)
15

--------------------
vk.com/ansicommonlisp
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0689 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.