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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp выбор опции по умолчанию

Lisp выбор опции по умолчанию

Ответ
Поиск в этой теме
Непрочитано 22.06.2014, 21:41 #1
Lisp выбор опции по умолчанию
olga87
 
Регистрация: 28.05.2007
Сообщений: 229

Здравствуйте Уважаемые программисты AutoCAD!
Подскажите пожалуйста, как исправить код ниже, чтобы после запуска команды (test) по нажатию ENTER, т.е. при выборе опции "Да" по умолчанию, работал код, т.е. выводилось сообщение "Выбрано Да."?

Код:
[Выделить все]
 (defun c:test ()
(initget "Да Нет")
(setq x (getkword "\nПродолжить ? [Да/Нет] <Да> :"))
(if (= x "Да")
(prompt "\nВыбрано Да.")
)
(if (= x "Нет")
(prompt "\nВыбрано Нет.")
nil
)
(princ)
)
Спасибо!

Последний раз редактировалось Кулик Алексей aka kpblc, 22.06.2014 в 21:53.
Просмотров: 1993
 
Непрочитано 22.06.2014, 22:25
#2
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Так?
Код:
[Выделить все]
 ...
(setq x (getkword "\nПродолжить ? [Да/Нет] <Да> :"))
(if (null x) (setq x "Да"))
(if (= x "Да")
...
skkkk вне форума  
 
Непрочитано 22.06.2014, 22:41
#3
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
 (setq x (cond
          ((getkword "\nПродолжить ? [Да/Нет] <Да> :"))
          (t "Да")
          ) ;_ end of cond
      ) ;_ end of setq
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.06.2014, 23:42
#4
olga87


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


Спасибо!
olga87 вне форума  
 
Непрочитано 24.06.2014, 15:19
#5
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


удалил
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 24.06.2014, 15:25
#6
Кулик Алексей aka kpblc
Moderator

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


Правильно, потому что у меня уже тыщу лет как подобная задачка выведена в отдельную практически стандартную конструкцию:
Код:
[Выделить все]
 ((lambda (/ res)
   (if (= (type (setq res (vl-catch-all-apply
                            (function (lambda ()
                                        (initget "Да Нет Yes No _ Y N Y N")
                                        (cond
                                          ((getkword "\nПродолжить ? [Да/Нет] <Да> :"))
                                          (t "Y")
                                          ) ;_ end of cond
                                        ) ;_ end of LAMBDA
                                      ) ;_ end of function
                            ) ;_ end of VL-CATCH-ALL-APPLY
                      ) ;_ end of setq
                ) ;_ end of type
          'str
          ) ;_ end of =
     (progn
       (princ res)
          ; че-то делаем
       ) ;_ end of progn
     (alert "Нажат Esc")
     ) ;_ end of if
   ) ;_ end of lambda
 )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.06.2014, 16:02
#7
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Добавлю - для ввода значения по умолчанию совсем не обязательно использовать именно getkword. Это может быть любая get-функция. Причем имя этой функции можно передавать тоже аргументом, как и ключевые слова. В результате любой ввод можно сделать надежным и безошибочным.

Насколько я помню, такую функцию публиковал в dwgru-lisp-lib.
ShaggyDoc вне форума  
 
Непрочитано 24.06.2014, 19:50
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Не нужно делать программы шибко вумными. А то сами же станете жертвами подобного
- Продолжить?
- Пожалуй...
- Может чашечку кофе?..
- Только со сгущенкой!
- Не желаете ли взглянуть на девочек?
- Рисуй уже этот */;?@нный сварной шов!!!=[
gomer вне форума  
 
Непрочитано 25.06.2014, 07:03
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Не нужно делать программы шибко вумными. А то сами же станете жертвами подобного
Это так. Но программы должны быть простыми, короткими и надежными. Для этого "конечные" программы должны использовать библиотечные функции (например, для ввода данных). Вот эти функции могут быть как угодно сложны - они разрабатываются один раз, а используются сотни раз. При этом их текст не засоряет программу. И любое изменение библиотечной функции сразу приводит к изменению работы сотен программ.

Кроме того, конкретно для Автокада, интерфейс командной строки должен быть максимально приближен к его штатной концепции:

1. В момент запроса, например, точки - позволять сразу ввести точку или отказаться.
2. Иметь набор опций, позволяющих в момент запроса точки, например, вместо указания точки выбрать опцию, а потом вновь вернуться к указанию.
3. Всегда иметь действие (или значение) по умолчанию - выполняется при нажатии Enter.

В этом случае, например, программа рисования сварного шва будет действовать наподобие привычного рисования полилинии или отрезка, т.е. с просто с указанием точек, но с возможностью выбора типа шва в виде опции.

А последовательные гнусные предложения выбора конечно не нужны и вредны.
ShaggyDoc вне форума  
 
Непрочитано 25.06.2014, 16:10
#10
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Одно мне не нравится в библиотечных функциях - их нужно уметь использовать. Например, в pltools набор преобразуется в список примитивов, потом в в список vla-объектов или наоборот, то есть вместо одной итерации происходит две, а то и три... на малых наборах это не заметно, но если взять набор побольше...
gomer вне форума  
 
Непрочитано 25.06.2014, 16:28
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


На то есть композиция функций - но в автолиспе с этим "слабовато".
з.ы. еще есть ленивые вычисления и последовательности - но с этим еще слабее - хотя реализовать можно.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp выбор опции по умолчанию



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
LISP / Быстрый выбор примитивов по образцу TararykovDG LISP 18 21.01.2021 12:35
LISP Опции функции. rocker-serj LISP 4 17.10.2013 17:29
Lisp. Как запретить выбор приметива? (можно ли такое сделать) Shraybicus LISP 8 08.02.2011 16:56
Как в Lisp измменить папку по умолчанию???? tinik_89 LISP 6 20.01.2010 06:29