![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
kosyak |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: ![]() ![]() ![]() |
Доброго всем времени суток.
Необходимо написать программу на Lisp. (который в AutoCad). Задача:Написать программу реверсирования всех атомов из подсписков любого уровня. Т.е. если есть список (1 2 3 (4 5 (6 7))), то на выходе получим (((7 6) 5 4) 3 2 1) есть код программы (вроде она, но не работает): Код (defun create_list () (setq l(getstring "Введите список:")) (setq i 1) (setq curr_level -1) (setq high_level -1) (setq str "") (setq str_length(strlen l)) (while (<= i str_length) (setq char(substr l i 1)) (if (= char "(") (setq curr_level(1+ curr_level)) ) (if (= char ")") (setq curr_level(1- curr_level)) ) (if (> curr_level high_level) (setq high_level curr_level) ) (setq i (1+ i)) ) (setq curr_level -1) (setq i 1) (setq result "") (while (<= i str_length) (setq char(substr l i 1)) (if (= char "(") (setq curr_level(1+ curr_level)) ) (if (= char ")") (setq curr_level(1- curr_level)) ) (if (= curr_level high_level) (progn (if (not(= char "(")) (progn (if (not(= char " ")) (progn (setq str(strcat str char)) (if (= (substr l (1+ i) 1) ")") (progn (if (= (listp result) nil) (setq result(list str)) (setq result(cons str result)) ) (setq str "") ) ) ) (progn (if (= (listp result) nil) (setq result(list str)) (setq result(cons str result)) ) (setq str "") ) ) ) ) ) ) (setq i (1+ i)) ) (setq result(reverse result)) (princ (strcat ">>>> Список:")) (setq i 0) (while (not(= (nth i result) nil)) (princ (strcat (nth i result))) (setq i(1+ i)) (if (not(= (nth i result) nil)) (princ (strcat " ")) (print ".") ) ) ) Может это конешно не та программа... я точно не знаю (только начал изучать LISP) Если она, то помогите найти ошибку. А если нет вот такоей вопрос: можно ли список преобразовать в строку (и обратно)? Пожалуйста, помогите разобраться как это надо делать... Заранее всем благодарен |
мисс_граффити |
![]()
Сообщение
#2
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
рекурсивно не проще ли было бы?
соединять реверсированный остаток с реверсированным первым элементом... (реверсированный = к которому применена наша ф-ция)? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
kosyak |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: ![]() ![]() ![]() |
рекурсивно не проще ли было бы? соединять реверсированный остаток с реверсированным первым элементом... (реверсированный = к которому применена наша ф-ция)? Я просто не очень понимаю как там сделать рекурсию... Есть вот такая функция: Код (DEFUN REVERSE-1 (X) (COND ((NULL X) NIL) (T (APPEND (REVERSE-1 (CDR X)) (LIST(CAR X)))))) Реверсирует список, только без вложенных... пыталься сделать с вложенными, как говорили (соединять реверсированный остаток с реверсированным первым элементом): Код (DEFUN REV (X) (COND ((NULL X) NIL) (T(APPEND (REV (CDR X)) (REV (LIST(CAR X))))))) (DEFUN MY (X) (REV '(X)) (PRINT X) ) что-то тут не так... в чем дело?? Хелп Сообщение отредактировано: kosyak - 1.11.2008 6:55 |
мисс_граффити |
![]()
Сообщение
#4
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
попробуй вот так (пишу здесь, навскидку)
если не пойдет - попробую дома, с автокадом, разбираться. Код (DEFUN REVERSE-1 (X) (COND ((NULL X) NIL) (T (APPEND (REVERSE-1 (CDR X)) (REVERSE-1(LIST(CAR X))))))) -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
kosyak |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: ![]() ![]() ![]() |
попробуй вот так (пишу здесь, навскидку) если не пойдет - попробую дома, с автокадом, разбираться. Код (DEFUN REVERSE-1 (X) (COND ((NULL X) NIL) (T (APPEND (REVERSE-1 (CDR X)) (REVERSE-1(LIST(CAR X))))))) Спасибо за помощь, но все равно не работает)) Может я чего не так ввожу? в автокаде ввожу: " (REVERSE-1 '(1 2 3 (4 5))) ". А чем это отличается от того что я написал? |
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 11:26 |