Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Операторный стиль, никак не могу найти ошибку(((( 
:(
    Опции темы
rocko
Дата 28.12.2010, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, помогите пожалуйста решить задачу в опрераторном стиле:
Есть список вида:
((1(2 3)4)(5 6 (7 8 9))(10 (11 12 13)(14 15 16)))
необходимо его преобразовать в вид:
((1(2)4)(5 6(7))(10(11)(14)))

Вот что вышло, помогите исправить ошибки...

defun vvod() (progn (setq x (progn (princ "input matrix as one list") (terpri) (read)))))

(defun res () (progn 
(setq y x)
(setq x ())
(setq f ())
b1

(setq z (car y))
(go b2)

b2 
(cond ( (not (atom(car z))) (progn ( setq f (append f (list (caar z)))) (setq z (cdr z)) (cond ((not (null z)) (go b2))) )))
( cond ((not (null z)) (progn (setq f (append f (list(car z)))) (setq z (cdr z)) (cond ((not (null z)) (go b2))) ))) 
(t (go m1))

m1

(setq x (append x f))
(setq f ())
(setq y (cdr y))

(cond ((not (null y)) (go b1))) ))
Цитата




Это сообщение отредактировал(а) rocko - 28.12.2010, 12:22
PM MAIL   Вверх
k0rvin
Дата 28.12.2010, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



пример ни разу не объясняет, что на самом деле нужно сделать со списком.
что такое "операторный стиль"? это как-то связано с оператором ЭВМ?
что за диалект?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
rocko
Дата 28.12.2010, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну в каждом подсписке нужно оставить только голову...
и нужно использовать ф-и do и лейблы для решения задачи, без рекурсии и функционалов
PM MAIL   Вверх
k0rvin
Дата 29.12.2010, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну например так:
Код

(defun only-heads (list)
  (labels ((only-head (x)
             (do ()
                 ((or (atom x)
                      (null x)
                      (null (rest x)))
                  t)
               (rplacd x nil)
               (setf   x (car x)))))
    (do ((xs list (rest xs)))
        ((null xs) list)
      (when (consp (car xs))
        (only-head (car xs))))))

или так:
Код

(defun only-heads-2 (list)
  (let ((xs list) x)
    (tagbody
     begin
     (when (null xs) (go end))
     (setq x (car xs))
     
     only-head
     (cond ((atom x) (go next))
           ((null x) (go next))
           ( t     
             (rplacd x nil)
             (setq x (car x))
             (go only-head)))
     
     next
     (setq xs (cdr xs))
     (go begin)
     
     end
     (return-from only-heads-2 list))))


тест:
Код

; CL-USER> (only-heads '(1 2 (3 4) () ((5 6) 7 8) 9))
; (1 2 (3) NIL ((5)) 9)
;
; CL-USER> (only-heads-2 '(1 2 (3 4) () ((5 6) 7 8) 9))
; (1 2 (3) NIL ((5)) 9)



--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
rocko
Дата 29.12.2010, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



пишет ошибку на tagbody, when,only-head...может из-за другой версии ЛИСПа?
PM MAIL   Вверх
k0rvin
Дата 29.12.2010, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну замените tagbody на progn, а when на if


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

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

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


 




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


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

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