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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Ответ
Поиск в этой теме
Непрочитано 20.07.2008, 20:12
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,980

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (Visual foxpro) программку типа суммирования столбцов списал у соседа (это уже в университете).
Не смотря на эте намерен научится писать программы для Автокада на лиспе, скачал книгу Хювенена, несколько примеров создания программ, но после получасового “смотрения” таких книг мое мышление явно притормаживает.
Решил пойти другим путем.
Нашел самый короткий лисп из моей коллекции, и прошу программистов с этого форума пошагово объяснить какой символ что означает. Надеюсь на вашу помощь.


Код:
[Выделить все]
(defun c:make-blocks-explodeable (/ adoc)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (and (equal (vla-get-isxref blk_def) :vlax-false)
             (equal (vla-get-islayout blk_def) :vlax-false)
             ) ;_ end of and
      (vl-catch-all-apply '(lambda () (vla-put-explodable blk_def :vlax-true)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
_____________________________________________________________________________________________________________

Прошло много лет и топик теперь представляет из себя площадку для обучения азов программирования для многих начинающих.
Так что начинающие лиспогрызы приветствуются .
__________________
Блог

Последний раз редактировалось Red Nova, 12.07.2017 в 05:43.
Просмотров: 1971788
 
Непрочитано 25.02.2022, 15:42
#4141
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну и официальный ресурс разработчиков.
и если на английском хотя бы читаете более менее - справка. Там тоже примеры кода есть.
Сергей, поймите правильно, справкой и ресурсом я пользуюсь и справочник "бумажный" раздобыл. Но там найти можно что-то конкретное, а, например, как разбить функцию на подфункции, или как убрать лишние аргументы справка не объяснит. Хотя, возможно, я не умею искать. Лучшей формой обучения считаю практические занятия, потому и пошел таким путем.
Alxndr1697 вне форума  
 
Непрочитано 25.02.2022, 16:29
#4142
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
а, например, как разбить функцию на подфункции, или как убрать лишние аргументы справка не объяснит
немного не так. В лиспе вообще нет никаких средств разделения кода, в объектно-ориентированном программировании ООП (куда входит и тот же C#) у вас будет написан класс типа CreateCabinet, имеющий конструктор с 3-5 базовыми параметрами. А если нужно задавать какие то дополнительные условия, отличающиеся от значений по умолчанию - в классе делаете свойства. И задаете по необходимости эти свойства после создания самого объекта класса. Т.е. не надо будет задавать все 15 аргументов каждый раз. А можно вместо свойств сделать перегруженные конструкторы с разным количеством или типами аргументов и вызывать именно требуемый конструктор.

Также внутри класса есть возможность создавать внутренние поля-переменные (куда заносятся те же параметры создания). А так же есть возможность создавать внутренние методы, имеющие доступы к этим полям (т.е. не надо загонять в аргументы внутренних методов) и эти методы выполняют каждый свой кусочек работы по созданию шкафа (т.е. можно отлаживать по отдельности). И при этом нет никаких конфликтов с другими частями программы даже при совпадении имен внутренних переменных и методов, так как инкапсуляция является одной из основ ООП.

А в лиспе ничего этого нет - либо локальная переменная функции, либо глобальная переменная, значение которой может в любой момент изменить любая другая функция кода - о чем и писал Алексей выше
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Любая функция / модуль должна работать только с теми данными, которые ей "прилетают" и не затрагивать глобальные переменные. Не надо делать т.н. "GodObject" (божественные объекты) с массой ответственности. Если такое появляется - это отличный шанс выстрелить себе в ногу в самый непредсказуемый момент.
p.s. *методы = функции и процедуры
Сергей812 вне форума  
 
Непрочитано 25.02.2022, 17:09
#4143
Кулик Алексей aka kpblc
Moderator

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


Ну, при желании и в лиспе можно "перегрузку" организовать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.02.2022, 17:31
#4144
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ну, при желании и в лиспе можно "перегрузку" организовать
имхо, это больше похоже на функцию с переменным количеством параметров типа object) В том же VB/VBA есть встроенный механизм ParamArray, в C# - params, в лиспе приходится эмулировать списком.
Сергей812 вне форума  
 
Непрочитано 25.02.2022, 17:53
#4145
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,678


Alxndr1697, это какой-то мебельный шкаф что ли?
koMon вне форума  
 
Непрочитано 25.02.2022, 23:06
#4146
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от koMon Посмотреть сообщение
Alxndr1697, это какой-то мебельный шкаф что ли?
Да, он самый. Мне надоело перерисовывать чертежи, которые приходят мне в работу и дабы облегчить себе труд и сократить время перерисовки, решил "освоить" лисп, чисто в личных нуждах, а дальше посмотрим.

----- добавлено через ~15 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
C#, к примеру. Видео на youtube - ищи Дмитрия Загорулькина (напрямую по ACAD)
Нашел
Отчего-то я решил, что ЛИСП, - это азбука, не изучив которую, дальше нет смысла идти.
Alxndr1697 вне форума  
 
Непрочитано 25.02.2022, 23:24
#4147
Кулик Алексей aka kpblc
Moderator

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


Сейчас пробую что-то ковырять в C#, весьма увлекательно. Правда, вопросы в 99% случаев не касаются ACAD'a
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.02.2022, 00:03
#4148
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


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

Если есть эксель, то можно попробовать перерисовывать через COM - интерфейс. Заодно в самом экселе делать расчеты и хранить вспомогательные данные на листах. Но через COM не все доступно.

Последний раз редактировалось Сергей812, 26.02.2022 в 00:08.
Сергей812 вне форума  
 
Непрочитано 26.02.2022, 00:24
#4149
Кулик Алексей aka kpblc
Moderator

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


Offtop: Сергей812, мне кажется, советовать VBA, да еще и с ранним связыванием... Я бы не стал двигаться по этому пути, честно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.02.2022, 00:38
#4150
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


Offtop:
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
мне кажется, советовать VBA, да еще и с ранним связыванием... Я бы не стал двигаться по этому пути, честно.
ну это лишь один из вариантов, учитывая что VBA для мс офиса встроенный родной язык) А после отладки убирается ссылка на библиотеку акада и раннее связывание быстро переделывается на позднее. Но согласен - лучше, конечно, работать "изнутри" акада, а не через COM-прокладку со своими глюками.
Сергей812 вне форума  
 
Непрочитано 26.02.2022, 07:00
#4151
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Если какой-то код длиннее 3..5 строк с оооочень незначительными изменениями (ну, например, имена используемых переменных) копипастится хотя бы раз - его надо в отдельную функцию выносить. Т.н. принцип DRY: Don't Repeat Yourself (никогда не повторяй за собой).
Я правильно понял, что если, например, у меня "большой" дефан_шкаф, то его надо разбить на дефан_корпус, дефан_фасад, дефан_полик и т.д.?

Извините, пожалуйста, но у меня осталось желание "допилить" свой шкаф в лиспе)))
Alxndr1697 вне форума  
 
Непрочитано 26.02.2022, 07:39
#4152
ShaggyDoc

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


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
Я правильно понял, что если, например, у меня "большой" дефан_шкаф, то его надо разбить на дефан_корпус, дефан_фасад, дефан_полик и т.д.?
Конечно. Еще лучше разбить на функции-"доски", из которых можно собирать что угодно.

А также сделать надежные функции ввода данных, потому что штатные "get=xxx" не защищены от действий пользователя. Нажмет ESC и вся программа рухнет.

Т.е. надо сформировать библиотеку функций - каждая из которых короткая, с минимумом аргументов.

А уже с использованием библиотеки делать конечные команды-функции для конкретных шкафов-диванов, и вообще всяких "из досок". Каждая из них будет очень короткой, надежной и легко читаемой.

Стоит подумать - а нужен ли вообще здесь диалог на DCL. Это ведь реликт давних времен, когда ничего лучшего не было. Разрабатывать такие диалоги не так уж и сложно, но очень муторно.

В этих "шкафах" немного данных для ввода, причем многие из них условно-постоянные. Вполне может быть сделана "команда" с командной строкой, с опциями и значениями по умолчанию.
ShaggyDoc вне форума  
 
Непрочитано 26.02.2022, 20:59
#4153
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Еще лучше разбить на функции-"доски", из которых можно собирать что угодно.
Идею понял. Думаю, по такому принципу "Базис-Мебельщик" и работает.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
А также сделать надежные функции ввода данных, потому что штатные "get=xxx" не защищены от действий пользователя. Нажмет ESC и вся программа рухнет.

Т.е. надо сформировать библиотеку функций - каждая из которых короткая, с минимумом аргументов.

А уже с использованием библиотеки делать конечные команды-функции для конкретных шкафов-диванов, и вообще всяких "из досок". Каждая из них будет очень короткой, надежной и легко читаемой.
Был бы признателен за какой-то реальный пример. Простенькую программу с парой "досок", в остальном постараюсь разобраться.


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
В этих "шкафах" немного данных для ввода
Ооо, вот тут не соглашусь. В свое окно впихнул, как понимаю, с избытком, планировал еще пару параметров и, все равно, останется что подправить в модели. (Как говаривала Тося Кислицина, - "Из картошки, знаешь сколько блюд приготовить можно?" )))
Alxndr1697 вне форума  
 
Непрочитано 26.02.2022, 20:59
#4154
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,678


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
Извините, пожалуйста, но у меня осталось желание "допилить" свой шкаф в лиспе)))
Это правильное решение)
koMon вне форума  
 
Непрочитано 26.02.2022, 21:49
1 | #4155
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
Был бы признателен за какой-то реальный пример. Простенькую программу с парой "досок", в остальном постараюсь разобраться.
изучайте монументальный труд, там приведены листинги того - о чем говорит ShaggyDoc)
Сергей812 вне форума  
 
Непрочитано 09.03.2022, 06:16
#4156
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
изучайте монументальный труд, там приведены листинги того - о чем говорит ShaggyDoc)
Приобрел книгу (для учебы предпочитаю бумажные варианты), "читаю" уже на 200 странице и понимаю, что ничего не понимаю. Все таки, эта книга далеко не для новичков... Я, конечно, дочитаю до конца, но, на изучение, к сожалению, это мало похоже.
Спасибо.
Alxndr1697 вне форума  
 
Непрочитано 09.03.2022, 06:39
#4157
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
и понимаю, что ничего не понимаю
Я бы сказал, что сей труд весьма полезен когда уже научился кодить хоть что то. "САПР на базе..." неплохо вправляет мозги на тему систематизации в разработке кода.
А если говорить о повседневной шпаргалке, то скорее подойдет "AutoLisp и VisualLisp в среде Autocad" за авторством Полещука. Хотя при некоторой сноровке эту книгу заменит справка автокада, тем более что творение Полещука слегка устарело морально, акад все таки развивается помаленьку.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 09.03.2022, 07:12
#4158
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
А если говорить о повседневной шпаргалке, то скорее подойдет "AutoLisp и VisualLisp в среде Autocad" за авторством Полещука
Имеется. Настольная книга, так сказать)))
Хочу еще найти Хювенен, Э.; Серрянен, Й. Мир Лиспа, пока безуспешно.
Alxndr1697 вне форума  
 
Непрочитано 09.03.2022, 09:46
#4159
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
Приобрел книгу (для учебы предпочитаю бумажные варианты), "читаю" уже на 200 странице и понимаю, что ничего не понимаю. Все таки, эта книга далеко не для новичков... Я, конечно, дочитаю до конца, но, на изучение, к сожалению, это мало похоже.
Спасибо.
Просто ShaggyDoc является одним из авторов этой книги, и когда он пишет про организацию кода на лиспе - в этой книге можно найти практические примеры того, что он говорит.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
Хочу еще найти Хювенен, Э.; Серрянен, Й. Мир Лиспа, пока безуспешно.
зачем? CommonLisp и AutoLisp - это разные вещи.
Сергей812 вне форума  
 
Непрочитано 14.03.2022, 22:17
#4160
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
зачем? CommonLisp и AutoLisp - это разные вещи.
Уже нашел и понял) В начале темы, к ней несколько раз отсылали, вот и решил.

Переменной L_sh надо присвоить значение 270, если расстояние больше 273 и меньше 303. Что я здесь пишу неправильно?

Код:
[Выделить все]
  (setq	L_sh (if (and (>= (- (cadr P_B) (cadr P_0)) 273)
		      (<= (- (cadr P_B) (cadr P_0)) 303)
		  )
	              (= L_sh 270)
	      )
   )
Alxndr1697 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46