| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > LISP > Операторный стиль |
| Автор: rocko 28.12.2010, 12:21 | ||
| Здравствуйте, помогите пожалуйста решить задачу в опрераторном стиле: Есть список вида: ((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))) ))
|
| Автор: k0rvin 28.12.2010, 21:32 |
| пример ни разу не объясняет, что на самом деле нужно сделать со списком. что такое "операторный стиль"? это как-то связано с оператором ЭВМ? что за диалект? |
| Автор: rocko 28.12.2010, 22:09 |
| ну в каждом подсписке нужно оставить только голову... и нужно использовать ф-и do и лейблы для решения задачи, без рекурсии и функционалов |
| Автор: k0rvin 29.12.2010, 13:23 | ||||||
ну например так:
или так:
тест:
|
| Автор: rocko 29.12.2010, 16:40 |
| пишет ошибку на tagbody, when,only-head...может из-за другой версии ЛИСПа? |
| Автор: k0rvin 29.12.2010, 18:12 |
| ну замените tagbody на progn, а when на if |