| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как правильно прописать "условие", чтобы Лисп корректно работал?

Как правильно прописать "условие", чтобы Лисп корректно работал?

Ответ
Поиск в этой теме
Непрочитано 20.12.2022, 07:19 #1
Как правильно прописать "условие", чтобы Лисп корректно работал?
Jek30
 
Регистрация: 19.08.2022
Сообщений: 71

В общем вот фрагмент кода из лиспа (возможно он у меня какой-то длинный и усложненный, но как смог):

Код:
[Выделить все]
(setq r (+ Dy Dx Dy))

(if (and (> r 798) (< r 810)) (setq forma "A4"))

(if (and (> r 711) (< r 723)) (setq forma "A4"))

(if (and (> r 1008) (< r 1020)) (setq forma "A3"))

(if (and (> r 1131) (< r 1143)) (setq forma "A3"))

(if (and (> r 1428) (< r 1440)) (setq forma "A2"))

(if (and (> r 1602) (< r 1614)) (setq forma "A2"))

(if (and (> r 2023) (< r 2034)) (setq forma "A1"))

(if (and (> r 2270) (< r 2282)) (setq forma "A1"))

(if (and (> r 2865) (< r 2877)) (setq forma "A0"))

(if (and (> r 3213) (< r 3225)) (setq forma "A0"))

(if (and (> r 1088) (< r 1100)) (setq forma "A3 500 (297.00 x 500.00 мм)"))

(if (and (> r 1188) (< r 1200)) (setq forma "A3 600 (297.00 x 600.00 мм)"))

(if (and (> r 1288) (< r 1300)) (setq forma "A3 700 (297.00 x 700.00 мм)"))

(if (= forma "A4") (setq printerok "PDFCreator") (setq printerok "DWG To PDF.pc3"))

(if (= forma "A3") (setq printerok "PDFCreator") (setq printerok "DWG To PDF.pc3"))

(if (= forma "A2") (setq printerok "PDFCreator") (setq printerok "DWG To PDF.pc3"))

(if (= forma "A1") (setq printerok "PDFCreator") (setq printerok "DWG To PDF.pc3"))

(if (= forma "A0") (setq printerok "PDFCreator") (setq printerok "DWG To PDF.pc3"))
Суть условия простыми словами следующий:
Если условие будет равняться любому одному из следующих: "A4", либо "A3", либо "A2", либо "A1", либо "A0". То выражение принимает - "PDFCreator" (отправка файла на этот принтер). А если условие не равняется тем значениям, то "DWG To PDF.pc3" (отправка файла на этот принтер).

В общем дело в последних пяти строчках в фрагменте кода который я представил выше (остальное работает), дело в том что лисп почему-то всегда выполняет только последнее условие
→(if (= forma "A0") (setq printerok "PDFCreator") (setq printerok "DWG To PDF.pc3"))←
а на остальные четыре оставшиеся выдает ошибку. Хотя если я поменяю местами последнюю строчку с предпоследней, то будет работать уже новая последняя строчка, а остальные четыре опять нет.
Короче таким образом я понял что у меня выполняется только одно условие из этих пяти. Как сделать чтобы все условия заработали?

Последний раз редактировалось Кулик Алексей aka kpblc, 20.12.2022 в 07:55.
Просмотров: 691
 
Непрочитано 20.12.2022, 07:54
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833


Как-то больно сложно у тебя написано... А чего cond и wcmatch не используешь?
Попробуй нечто типа:
Код:
[Выделить все]
 (setq r (+ dy dx dy))
(setq forma
       (cond
         ((or (< 798 r 810) (< 711 r 723)) "A4")
         ((or (< 1008 r 1020) (< 1131 r 1143)) "A3")
         ((or (< 1428 r 1440) (< 1602 r 1614)) "A2")
         ((or (< 2023 r 2034) (< r 2270 2282)) "A1")
         ((or (< 2865 r 2877) (< 3213 r 3225)) "A0")
         ((< 1088 r 1100) "A3 500 (297.00 x 500.00 мм)")
         ((< 1188 r 1200) "A3 600 (297.00 x 600.00 мм)")
         ((< 1288 r 1300) "A3 700 (297.00 x 700.00 мм)")
       ) ;_ end of cond
) ;_ end of setq
(setq printerok (if (wcmatch forma "A#")
                  "PDFCreator"
                  "DWG To PDF.pc3"
                ) ;_ end of if
) ;_ end of setq
----- добавлено через ~1 мин. -----
Правда, в моем коде не учитывается вариант, что forma вообще хоть какое-то значение получила.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.12.2022, 08:12
#3
Jek30


 
Регистрация: 19.08.2022
Сообщений: 71


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Как-то больно сложно у тебя написано... А чего cond и wcmatch не используешь?
Просто я в этом деле полный чайник.
Большое спасибо!
Jek30 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как правильно прописать "условие", чтобы Лисп корректно работал?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как корректно создать области на тротуарах дороги, чтобы они были адекватно видны в 3Д Vikulassuk Вертикальные решения на базе AutoCAD 0 25.02.2022 13:27
Как правильно назвать проект finder Архитектура 1 15.06.2021 19:12
Лисп по масштабированию объектов. posetitel LISP 4 06.08.2015 09:18
Помогите написать лисп чтобы посередине между концентрических замкнутых полилиний появлялась еще одна на другом слое(или другим цветом) kurstep LISP 12 21.07.2014 22:35
Как сдеть так чтобы правильно отображались линии в видовом экране? klerik AutoCAD 1 09.06.2010 12:26