> 1 <

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

Config13

Members


Статус

6 сообщений

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

#5255   2011-12-06 05:01 GMT+3 часа(ов)      
Извините заранее за назойливость - но можт в этом разделе кто сможет помоч???

Есть задачка: Написать программу инверсии атомов для заданного списка. Инверсия состоит в замене местами атома самого высокого уровня атомом самого низкого уровня в циклическом порядке следования.

Т.е. нужно пробежать циклом заданный список

А почему в цикле, - пример:
из (a ((b)) ((((c) d))) (e))должно получиться (с ((b)) ((((а) d))) (e)),
а вот в таком списке (a ((b)) ((((c) d))) (e((f)))) , (ой не напутал ли с кол-вом скобок)
мы A меняем на C, но F - тоже самого низкого уровня, и по циклу получается, что менять
его нужно на С (если я всё понял, т.к. мы уже А поменяли на С) и т.д

Я премного благодарен MEGAMANX`у за помошь(взял идею из его подсказок. только идею - т.к. в коммон лиспе - я 0
http://lisp.ru/forums.php?m=posts&p=4856#4856 )

Вот код, который мы начали делать на пару с профкссором (точнее делал он - вот продолжить бы, да и АВТОЛИСПЕ бы)


(setq n 0 m1 0 m2 0)
(setq t1 ())
(defun p8(x)
(setq y x)
(setq a1 ()) ; список атомов саого высокого уровня
(setq a2 ()) ; список атомов саого низкого уровня
(setq x1 ()) ; преобразованный список
;(print y)
;(princ "\n")
(foreach z y
(setq m1 0)
(if (listp z)
(progn
(p8r z )
;(princ m1)
; (princ "\n")
(if (< n m1)
(setq n m1)
)
)
)
)
(if (atom z)
(progn
(setq a1 (cons z a1))
)

)
(princ n)
(princ "\n")


(foreach z y
(if (listp z)
(progn
;(p8p n t m1)
(setq v (cons t v))
)
)
)
(princ "nienee naiiai ieceiai o?iaiy \ n")
(princ v)
(princ )
)


(defun p8r (L )
(setq m1 (+ 1 m1))
(princ L)
(princ "\n")
(princ m1)
(princ "\n")
(foreach z1 L
(if (listp z1)
(p8r z1)
)
)
)

> 1 <


Онлайн :

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




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