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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autocad08 Autolisp Без Defun'ов

Autocad08 Autolisp Без Defun'ов

Ответ
Поиск в этой теме
Непрочитано 12.10.2010, 13:57 #1
Autocad08 Autolisp Без Defun'ов
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Друзья подскажите, как можно переделать этот код так, что бы не было Defun'ов

Код:
[Выделить все]
(defun spoint ()
  
  (setq b (cons 10 (inter bp1 ug dpoi)))
  (setq w (nth 1 b))
  (if (/= w nil)
    (setq a (cdr b))
    (setq a nil)
  )  

)
(defun inter (bp1 ug dpoi / ss)
  (If (setq
    ss (ssget "_F" (list bp1 (polar bp1 ug dpoi)))
       )
     (cadr (cadddr (car (ssnamex ss))))
  )
)
Просмотров: 2063
 
Непрочитано 12.10.2010, 14:11
1 | #2
Дима_

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


заменить defun на defun-q, либо (setq XXX lambda ()...), но более интересный вопрос ЗАЧЕМ?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.10.2010, 14:16
#3
Zaghim


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


А можно пример в студию?
Долгая история) Думаю, что когда открываю второй файл при работе с прогой там не должно быть дефанов. Если интересно тема - открытие чертежа.
Zaghim вне форума  
 
Непрочитано 12.10.2010, 14:20
1 | #4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Zaghim, тогда напиши во втором файле так

Код:
[Выделить все]
(if (car (cons 10 (if (setq ss (ssget "_F" (list bp1 (polar bp1 ug dpoi)))) (cadr (cadddr (car (ssnamex ss)))))))
  (setq a (cdr b))
  (setq a nil)
  )
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 12.10.2010, 14:33
1 | #5
ShaggyDoc

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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
А можно пример в студию?
Долгая история) Думаю, что когда открываю второй файл при работе с прогой там не должно быть дефанов. Если интересно тема - открытие чертежа.
Почему "думаю"? Конечно, в любом файле можно написать "просто код". Но это будет означать, что все переменные, встречающиеся по ходу, будут считаться глобальными. Последствия этого могут быть непредсказуемыми.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 12.10.2010, 14:33
#6
Zaghim


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


В общем это не помогло...пздц полный
Zaghim вне форума  
 
Непрочитано 12.10.2010, 14:35
1 | #7
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Но это будет означать, что все переменные, встречающиеся по ходу, будут считаться глобальными
В принципе можно и локально (код 1 без дефанов).
Код:
[Выделить все]
((lambda (/ pt1 pt2 b ss a)
   (setq pt1 (getpoint)
	 pt2 (getpoint pt1)
	 b   (cons 10
		   (if (setq ss (ssget "_F" (list pt1 pt2)))
		     (cadr (cadddr (car (ssnamex ss))))
		     nil
		   )
	     )
   )
   (if (nth 1 b)
     (setq a (cdr b))
     (setq a nil)
   )
 )
)
Makswell вне форума  
 
Непрочитано 12.10.2010, 17:51
1 | #8
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 сразу и lambda показал, но тоже спросил - зачем?
ShaggyDoc вне форума  
 
Непрочитано 12.10.2010, 18:09
1 | #9
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Вот еще пример:
Код:
[Выделить все]
(apply '(lambda ()
   (setvar "cmdecho" 0)
   (princ "\n Динамическая команда ПОКАЖИ.")
   (princ "\n Выберите МАСШТАБ по скользящей шкале МЫШЬЮ...")
   (command "_DVIEW" "_all" "" "_Z" pause "_X")
   (princ "  Конец.")
   (princ)

)
'()
)
Profan вне форума  
 
Непрочитано 15.10.2010, 23:23
1 | #10
Li6-D


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


Насколько понял, надо написать код для нахождения первого пересечения секущей линии с объектами.
Если пересекается - вернуть точку пересечения* с добавленным кодом 10 впереди, если нет - nil.
Любые переменные, созданные в выражении с помощью setq, defun и пр., должны быть локальными.
Код:
[Выделить все]
((lambda (p) (if p (cons 10 (cadar (cdddar (ssnamex p))))))
 ((lambda (p) (ssget "_F" (list p (getpoint p "\n2-я точка секущей: "))))
  (getpoint "\n1-я точка секущей: ")
))
Впрочем, тут обошлось без defun и даже setq... Это требовалось?
*в экранных координатах...

Последний раз редактировалось Li6-D, 17.10.2010 в 21:11.
Li6-D вне форума  
 
Автор темы   Непрочитано 17.10.2010, 23:40
#11
Zaghim


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


Да. Всем спасибо... надо разбираться с этой лямбдой, нифига не понимаю принцип ее работы пока...
Zaghim вне форума  
 
Непрочитано 18.10.2010, 00:00
1 | #12
Li6-D


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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
... надо разбираться с этой лямбдой, нифига не понимаю принцип ее работы пока...
Может это: http://autolisp.ru/2009/09/16/lambda-functions/
Li6-D вне форума  
 
Непрочитано 18.10.2010, 00:53
1 | #13
Дима_

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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Да. Всем спасибо... надо разбираться с этой лямбдой, нифига не понимаю принцип ее работы пока...
Что-то модно стало см. пост №4 http://forum.dwg.ru/showthread.php?t=58568
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 18.10.2010, 10:04
#14
Zaghim


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


И не говори. Ладно всем большое спасибо!
Zaghim вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autocad08 Autolisp Без Defun'ов

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Железобетонные подкрановые балки. Без предварительно напряженной арматуры!? Розмысл Железобетонные конструкции 9 14.08.2019 22:42
Монолитный Ж/Б каркас многоэтажки без вертикальных связей? depak Железобетонные конструкции 35 11.10.2018 13:35
Серия 1.460.3-23.98 без прогонов Xo66iT Прочее. Архитектура и строительство 5 15.11.2016 09:53
Проект без АПЗ, а строительство без разрешения, стоит ли? HG Прочее. Архитектура и строительство 23 22.03.2010 16:59
Неужели ОВ-шники обходятся без Лиспа? Danilin LISP 19 16.02.2006 20:38