Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вылетает функция putassoc 
:(
    Опции темы
Zz1n
Дата 28.5.2014, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день форумчане. Не могу понять, почему вылетает ошибка.

(defun putassoc (key obj a_list)
(cond ((null a_list) nil)
((eql (caar a_list) key)
(rplacd (car a_list) obj))
((null (cdr a_list))
(rplacd a_list)
(list (cons key obj))))
(putassoc key obj (cdr a_list)))

(trace putassoc)    

(setq lst nil)
(setq lst (pairlis '(1 2 3) '(odin dva tri) lst))
(putassoc '2 'two lst)

однако после выполнения (cons (car lst)(cdr lst)) результат показывает правильный.
PM MAIL   Вверх
k0rvin
Дата 27.11.2014, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Zz1n @  28.5.2014,  13:45 Найти цитируемый пост)
почему вылетает ошибка


Потому что процедура написана неправильно.

Код

(defun getkey (pair)
  (car pair))

(defun putvalue (pair val)
  (rplacd pair val))

(defun putassoc (key val list)
  (cond ((null list) nil)
        ((eql (getkey (car list)) key)
         (putvalue (car list) val))
        (t
         (putassoc key val (cdr list)))))

(defun test ()
  (let ((alist '((a . 1) (b . 2) (c . 3))))
    (putassoc 'b 5 alist)
    (putassoc 'd 9 alist)
    (print alist)
    nil))


Код

(test)
; ((A . 1) (B . 5) (C . 3))



--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

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

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


 




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


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

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