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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Я начинаю заниматься программированием LISP (help)

Я начинаю заниматься программированием LISP (help)

Ответ
Поиск в этой теме
Непрочитано 19.02.2006, 20:00
Я начинаю заниматься программированием LISP (help)
mmax
 
Программист широкого профиля.
 
Челябинск
Регистрация: 08.09.2005
Сообщений: 722

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

И соответственно у меня начали появляться вопросы на которые г-н Полещук НН в своих произведениях не смог ответить в полном объеме, значит мне понадобится чья нибудь еще помощь.

У меня уже были вопросы которые я задал здесь и получил исчерпывающие ответы. Но если я на кждый вопрос буду создавать отдельный топик, то количество топиков будет = кол-ву вопросов, а вопросов миллион -- администраторы и модераторы данного ресурса наверное понимают о чем я. Да и такое кол-во ссылок не влезет мой..........

Вобщем я хотел бы все свои вопросы помещать в этот топик и надеюсь на поддержку знающих людей.

Всем заранее благодарен.
Просмотров: 78363
 
Автор темы   Непрочитано 25.02.2006, 23:02
#61
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от vk
Цитата:
Сообщение от mmax
Столкнулся с такой проблемой

Код:
[Выделить все]
(if (progn
              (условие 1)
               (условие 2)
                (условие 3)
                 );;progn
(Выполнить действие)
);;if
Получается, что если хотябы одно условие верно действие выполняется. Мне бы холтелось бы наоборот -- хотябы одно условие не верно -- действие не выполнять
Эт кто ж Вас научил такому? Правильней все же так
Код:
[Выделить все]
(if (and
       (условие 1)
       (условие 2)
       (условие 3)
     );;and
   (progn
    (Выполнить действие)
    (Выполнить действие)
    (Выполнить действие)
    (Выполнить действие)
  );;progn
);;if
Ну и почитайте документацию по применению логических функций
Првильнее будет вместо AND использовать OR точнее для данной ситуации нужно.
mmax вне форума  
 
Непрочитано 25.02.2006, 23:45
#62
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от mmax
Првильнее будет вместо AND использовать OR точнее для данной ситуации нужно.
Если Вы в этом уверены, то покажите как это сочетается с Вашим же требованием
Цитата:
Сообщение от mmax
Мне бы холтелось бы наоборот -- хотябы одно условие не верно -- действие не выполнять
Для себя я мыслю так: действие должно быть выполнено в том случае ЕСЛИ если И первое И второе И третье условия соблюдены

Добавочка:
Цитата:
Сообщение от mmax
Получается, что если хотябы одно условие верно действие выполняется.
Как говорит один мой знакомый, заглянем в Талмуд

Цитата:
progn Function

Evaluates each expression sequentially and returns the value of the last expression

(progn [expr]...)

You can use progn to evaluate several expressions where only one expression is expected.

Arguments
expr
One or more AutoLISP expressions.

Return Values
The result of the last evaluated expression.
Функция (progn) вернет последний результат, то есть, результат проверки последнего условия, а первые два будут попросту проигнорированы.
vk вне форума  
 
Непрочитано 26.02.2006, 01:07
#63
Vika


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


Спасибо всем откликнувшимся, для себя решила, что эффективнее будет пройти курс Автолиспа с преподом. На курсах.
__________________
Muchas gracias, senores!
Vika вне форума  
 
Автор темы   Непрочитано 26.02.2006, 19:37
#64
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от Vika
Спасибо всем откликнувшимся, для себя решила, что эффективнее будет пройти курс Автолиспа с преподом. На курсах.
А учебное пособие всегда должно быть под рукой
mmax вне форума  
 
Автор темы   Непрочитано 26.02.2006, 19:57
#65
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от vk
Цитата:
Сообщение от mmax
хотябы одно условие не верно -- действие не выполнять
Если хотябы одно условие из всех условий не верно

Ситуация 1
Есть n условий:
первое условие не верно
второе верно
третье неверно
пятое верно .............итд --------- (действие не выполнять или отменить и выполнить все заново)

Ситуация2
n услолвий верны ------------ (действие выполнить или продолжить работу программы)

На мой взгляд так надо делать обработку неверного ввода в диалоговое окно, когда например не допускется пустой ввод, 0, итд.
Или объясните как запретить ввод недопустимых данных в edit box
INITGET здесь не (очень) подходит.
mmax вне форума  
 
Автор темы   Непрочитано 26.02.2006, 20:06
#66
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Скажите пожалуйста,

Как нарисовать за один прием много окружностей.

Список с центрами уже почти получен

Количество окружностей задается пользователем и угадать его можно
Но команда отрисовки должна быть одна, в нее надо засунуть список с центрами и одним радиусом.
mmax вне форума  
 
Непрочитано 26.02.2006, 20:36
#67
favorite

инженер
 
Регистрация: 05.12.2005
Москва
Сообщений: 425


>mmax

Вот, я знал что должна быть функция "or" только в моих источниках , я про нее ничего не нашел. Так она все-таки реализована в Lisp или нет?
favorite вне форума  
 
Непрочитано 26.02.2006, 21:05
#68
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от favorite
Так она все-таки реализована в Lisp или нет?
Если не секрет, что помешало в течении суток заглянуть в хелп по Липу и найти ответ на этот вопрос? :wink:
vk вне форума  
 
Непрочитано 26.02.2006, 21:13
#69
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от mmax
Как нарисовать за один прием много окружностей.

Список с центрами уже почти получен
Так примерно

Код:
[Выделить все]
_$ (setq d 5.0)
5.0
_$ (setq c '((10 20) (30 40) (50 60)))
((10 20) (30 40) (50 60))
_$ (mapcar '(lambda (x) (command "_circle" x d)) c)
(nil nil nil)
_$
vk вне форума  
 
Непрочитано 26.02.2006, 21:15
#70
favorite

инженер
 
Регистрация: 05.12.2005
Москва
Сообщений: 425


Цитата:
Сообщение от vk
Цитата:
Сообщение от favorite
Так она все-таки реализована в Lisp или нет?
Если не секрет, что помешало в течении суток заглянуть в хелп по Липу и найти ответ на этот вопрос? :wink:
Плохое знание англ , я думаю.
favorite вне форума  
 
Непрочитано 26.02.2006, 21:41
#71
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


> favorite
Простите, я в недоумении....

Это насколько же плохое знание английского надо иметь для того чтоб сверяя имя функции из вашего же поста букву за буквой (аж две штуки) с именами функций в списке хелпа....

Признайтесь, Вы шутите :?:
[ATTACH]1140979281.gif[/ATTACH]
vk вне форума  
 
Непрочитано 27.02.2006, 09:51
#72
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


>vk
Позволил себе наглость, немного усовершенствовать предложенный вами лисп, чтоб можно было дальше в программе использовать окружности...
Код:
[Выделить все]
(setq d 5.0)
(setq lst-pt '((10 20) (30 40) (50 60)))
(setq
  lst-ent (mapcar
	    (function
	      (lambda (x)
		(entmakex
		  (list
		    '(0 . "CIRCLE")
		    (cons 10 x)
		    (cons 40 d)
		  ) ;_  list
		) ;_  entmakex
	      ) ;_  lambda
	    ) ;_  function
	    lst-pt
	  ) ;_  mapcar
) ;_  setq
В переменной lst-ent накапливаются имена полученных окружностей...
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 27.02.2006, 18:02
#73
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от favorite
>mmax

Вот, я знал что должна быть функция "or" только в моих источниках , я про нее ничего не нашел. Так она все-таки реализована в Lisp или нет?
Значит так
Расскажу как я реализовал OR.
Код:
[Выделить все]
(setq a 5 b 6 c 7 d 8 e n)
  
   (if  (or (Условие для а)
              (Условие для b)
               (Условие для c)
                (Условие для d)
                 (Условие для e)
                 );or
              (Действие 1)
              (Действие 2)
                   );if
Если хотябы одно условие из всех условий не верно
будет выполнено (действие2) также например если только три условия верны или n-1 условий верно

(Действие 1) будет выполнено если все условия верны

Действия можно объединять с помощью PROGN те если какието условия не верны==> выполнить первые пять действий;
если все верны == выполнить вторые десять действий.

Если вместо or использовать PROGN и AND, то получается ситуация:
если хотябы одно условие верно ===== выполнить (действие 1)
если все не верны ===== выполнить (действие2)

Если действие 2 опущено а по условиям выполняться должно оно, то не выполняется ничего и программа если на этом месте не заканчивается -- продолжается дальше.

Кстати на этом форуме есть кнопки, кроме "цитата" позволяющие автоматически в текстовое окно вводить имена пользователей????? например чтобы щелкнул по имени пользователя и получилось > favorite
mmax вне форума  
 
Автор темы   Непрочитано 27.02.2006, 18:08
#74
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Елпанов Евгений
vk
Спасибо за совет
mmax вне форума  
 
Непрочитано 27.02.2006, 19:29
#75
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от mmax
Расскажу как я реализовал OR.
Код:
[Выделить все]
(setq a 5 b 6 c 7 d 8 e n)
  
   (if  (or (Условие для а)
              (Условие для b)
               (Условие для c)
                (Условие для d)
                 (Условие для e)
                 );or
              (Действие 1)
              (Действие 2)
                   );if
Если хотябы одно условие из всех условий не верно
будет выполнено (действие2) также например если только три условия верны или n-1 условий верно

(Действие 1) будет выполнено если все условия верны
Попробовал сделать по Вашей методике. Написал вот такой код
Код:
[Выделить все]
(setq a 22 b 6 c 7 d 8)

(if (or
      (= a 5)
      (= b 6)
      (= c 7)
      (= d 8)
    )
  (princ "\nДействие 1 \"все условия верны\"")
  (princ "\nДействие 2 \"хотя бы одно условие из всех условий не верно\"")
)
Загрузил из консоли. Пишет
Цитата:
_$

Действие 1 "все условия верны"
; 2 forms loaded from #<editor "<Untitled-0> loading...">
_$
Уважаемый mmax, подскажите в чем дело?
vk вне форума  
 
Непрочитано 27.02.2006, 21:40
#76
favorite

инженер
 
Регистрация: 05.12.2005
Москва
Сообщений: 425


Цитата:
Сообщение от vk
> favorite
Простите, я в недоумении....

Это насколько же плохое знание английского надо иметь для того чтоб сверяя имя функции из вашего же поста букву за буквой (аж две штуки) с именами функций в списке хелпа....

Признайтесь, Вы шутите :?:
[ATTACH]1140979281.gif[/ATTACH]

Да я шучу.
favorite вне форума  
 
Непрочитано 27.02.2006, 21:48
#77
favorite

инженер
 
Регистрация: 05.12.2005
Москва
Сообщений: 425


Помогите при изучении далее возникла проблема

Код:
[Выделить все]
(setq ss1 (ssget ((0. "TEXT"))))
(sslength ss1)
На просьбу выполнить выдается 0.0bad function: 0.0bad function: 0.0bad function: 0.0
Что сдесь не правильно? И зачем перед 0. двойные кавычки.

Вот откуда я это взял http://www.niac.ru/graphinfo.nsf/5f7f2cd00c87d30e432566f9003f057a/fbb061dc26847979432568aa006973a2!OpenDocument
favorite вне форума  
 
Непрочитано 27.02.2006, 21:54
#78
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Ты кавычку забыл скопировать и пробел пропустил...
Код:
[Выделить все]
(setq ss1 (ssget '((0 . "TEXT")))) 
(sslength ss1)
Елпанов Евгений вне форума  
 
Непрочитано 27.02.2006, 22:02
#79
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от Елпанов Евгений
Ты кавычку забыл скопировать и пробел пропустил...
Ничего он не забыл.... На той страничке по ссылке это не единственная ачипятка
Цитата:
Ю.И.Тарасов. Введение в язык АвтоЛИСП

ЛЕКЦИЯ 5
..................................
Пример:
(setq a (open "abc.lsp" "r")
........................
(setq f (open "mytext.txt> "r"))
задает f как <описатель файла>.
...............................

Пример использования <фильтра-списка>:
(setq ss1 (ssget ((0. "TEXT")))) - запрашивает у пользователя выбор примитивов общего вида, однако только текстовые примитивы попадают в набор.
(setq ss1 (ssget "p" ((0. "LINE")))) - создает набор примитивов, входящих в текущий выбор и являющихся отрезками.
vk вне форума  
 
Непрочитано 27.02.2006, 22:02
#80
favorite

инженер
 
Регистрация: 05.12.2005
Москва
Сообщений: 425


Цитата:
Сообщение от Елпанов Евгений
Ты кавычку забыл скопировать и пробел пропустил...
Код:
[Выделить все]
(setq ss1 (ssget '((0 . "TEXT")))) 
(sslength ss1)
Да, я взял их пример и в буфер потом вставил.
Вот и изучай Lisp по инету. Где, я спрашиваю у них кавычка и пробел?
Спасибо.
favorite вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Я начинаю заниматься программированием LISP (help)

Размещение рекламы