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

Вернуться   Форум 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.
Просмотров: 1972200
 
Непрочитано 05.08.2008, 11:52
#321
ShaggyDoc

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


Цитата:
Разве минус не должен быть спереди
Символ "-" это не просто "минус", и не оператор "отнимания", а имя функции.
"1-" или "1+" это тоже имена функций. Странные такие, но все равно имена. Этим функциям передается аргументом целое число, результат (сам догадайся).
ShaggyDoc вне форума  
 
Непрочитано 05.08.2008, 12:00
#322
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Этим функциям передается аргументом целое число...
Поправка - любое число.
Alaspher вне форума  
 
Непрочитано 05.08.2008, 12:12
#323
Дима_

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


Ну тогда уж любое вещественное число.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.08.2008, 12:57
#324
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Ну тогда уж любое вещественное число.
С учётом контекста (AutoLISP) "любое число" тождественно "любому вещественному числу", а точнее - "любому рациональному числу" (и то с некоторыми ограничениями), поскольку сам язык не позволяет выйти за эти рамки. В хэлпе дано в варианте "Any number", что подразумевает любое число допустимое в AutoLISP.
Alaspher вне форума  
 
Непрочитано 05.08.2008, 14:03
#325
Дима_

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


И вообще фулдить на уроках...
P.S. не удержался - (1+ (sqrt 2)) - работает, а значит и ирациональному.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 05.08.2008 в 14:11.
Дима_ вне форума  
 
Автор темы   Непрочитано 05.08.2008, 14:33
#326
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Тогда еще вопрос. Как понять это
Код:
[Выделить все]
(setq tab  nil item (sslength value))
Я до сих пор не встречал после setq сразу 4 элемента. Разве их не должно быть только 2
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.08.2008, 14:38
#327
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Дима_ Посмотреть сообщение
И вообще фулдить на уроках...
P.S. не удержался - (1+ (sqrt 2)) - работает, а значит и ирациональному.
Ну это не флуд вообще-то. Понимание того, как работает интерпретатор языка отчасти страхует от сюрпризов в результатах.

В выражении [FONT=Courier New](1+ (sqrt 2))[/FONT] на вход функции [FONT=Courier New]1+[/FONT] будет подан результат выполнения функции [FONT=Courier New]sqrt[/FONT] фиксированной точности, т.е. рациональное число, где вся "иррациональность" будет уже потеряна - [FONT=Courier New]1+[/FONT] ничего "не знает" об источнике своего аргумента, если так можно выразиться.

Последний раз редактировалось Alaspher, 05.08.2008 в 14:48.
Alaspher вне форума  
 
Непрочитано 05.08.2008, 14:40
#328
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Тогда еще вопрос. Как понять это
Код:
[Выделить все]
(setq tab  nil item (sslength value))
Я до сих пор не встречал после setq сразу 4 элемента. Разве их не должно быть только 2
Да, может быть любое чётное количество аргументов, нечётные трактуются, как символы и им присваиаваются значения чётных.
Код:
[Выделить все]
(setq tab  nil item (sslength value))
Равносильно:
Код:
[Выделить все]
(setq tab  nil)
(setq item (sslength value))
Alaspher вне форума  
 
Автор темы   Непрочитано 05.08.2008, 15:11
#329
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


А как понять это
Код:
[Выделить все]
(repeat (setq tab  nil
                item (sslength value)
                ) ;_ end setq
    (setq tab (cons (ssname value (setq item (1- item))) tab))
    ) ;_ end repeatА как понять это
Из хелпа знаю что
Цитата:
(repeat <число> <выражение>...)
В этой функции <число> представляется любой положительной целой величиной. Функция выполняет каждое <выражение> заданное <число> раз и возвращает значение последнего выражения.
То есть форма такая
repeat <число> <выражение>
А у нас вместо <числа>
(setq tab nil item (sslength value))
Как ни кручу это выражение не может вернуть число.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.08.2008, 15:22
#330
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(setq tab  nil
                item (sslength value)
                )
Вернет значение item.
P.S. Непонятные куски запускай в консоли vlide - понимания будет больше )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.08.2008, 15:23
#331
Дима_

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


Цитата:
Сообщение от Alaspher Посмотреть сообщение
Ну это не флуд вообще-то. Понимание того, как работает интерпретатор языка отчасти страхует от сюрпризов в результатах.

В выражении [FONT=Courier New](1+ (sqrt 2))[/FONT] на вход функции [FONT=Courier New]1+[/FONT] будет подан результат выполнения функции [FONT=Courier New]sqrt[/FONT] фиксированной точности, т.е. рациональное число, где вся "иррациональность" будет уже потеряна - [FONT=Courier New]1+[/FONT] ничего "не знает" об источнике своего аргумента, если так можно выразиться.
В том то и дело, что ИНТЕРПРИТАТОР иначе как вы объямните эти примеры:
1. (* (1- (1+ (sqrt 2))) (1+ (1- (sqrt 2))))
2.0;
2. (* 100000000000000000000 (/ 10 3.0))
3.33333e+020;
3. (* 6.0 (/ 20.0 3.0))
40.0;
- по Вашей логике (если числа выдаються с определенной точностью) ответы должны другими получаться.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.08.2008, 15:55
#332
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Дима_ Посмотреть сообщение
- по Вашей логике (если числа выдаються с определенной точностью) ответы должны другими получаться.
Не обязательно - если сохранять все промежуточные результаты в переменных, то окончательный результат не изменится, т.е. в данных случаях просто округление происходит в "правильную" сторону.
Alaspher вне форума  
 
Непрочитано 05.08.2008, 15:59
#333
Кулик Алексей aka kpblc
Moderator

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


1. (1- (1+ (sqrt 2))) -> (sqrt 2)
(1+ (1- (sqrt 2))) -> (sqrt 2)
(* (sqrt 2) (sqrt 2)) -> 2.0
Так что все логично
2. (/ 10 3.0) -> 10/3
(* 1e20 10/3) да простят меня профессионалы -> (/ 1e21 3.) -> воспользуюсь математической записью 3.(3) * 10^20:
3.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.08.2008, 16:08
#334
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


kpblc, Вот что отвечает Vlide
Цитата:
_$ (setq tab nil
item (sslength value)
)
; error: bad argument type: lselsetp nil
_$
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.08.2008, 16:18
#335
Кулик Алексей aka kpblc
Moderator

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


А перед этим сделать (setq value (ssget)) попробуй
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.08.2008, 16:55
#336
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


У меня проблема с пониманием смысла value в данном коде, да и вообще с пониманием понятия аргумент.
Смысл переменной был понятен сразу. Ей можно присваивать разные значения. А какую роль играют аргументы не пойму.
Вот к примеру тут
Код:
[Выделить все]
(defun _dwgru-conv-pickset-to-list (value / tab item)
  (repeat (setq tab  nil
                item (sslength value)
                ) ;_ end setq
    (setq tab (cons (ssname value (setq item (1- item))) tab))
    ) ;_ end repeat
  ) ;_ end defun
В строке
Код:
[Выделить все]
(setq tab  nil
                item (sslength value)
                ) ;_ end setq
мы даем переменной item значение равное количеству выбора value. Но ведь value еще не чем не определено. Что за элементы в него входят? Сколько их?
Извиняюсь за черепашье мышление.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.08.2008, 16:59
#337
Кулик Алексей aka kpblc
Moderator

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


В данном случае value не "любое", а именно pickset - то есть результат (ssget). При вызове, аналогичном
Код:
[Выделить все]
(_dwgru-conv-pickset-to-list (ssget))
value уже получает значение сформированного набора. И потом обрабатывается.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.08.2008, 17:03
#338
Дима_

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


Цитата:
Сообщение от Alaspher Посмотреть сообщение
Не обязательно - если сохранять все промежуточные результаты в переменных, то окончательный результат не изменится, т.е. в данных случаях просто округление происходит в "правильную" сторону.
Как вариант - а есть идеи как можно проверить каким способом он работает? (то есть проверить хранит он в переменнной число с определенной точностью а при значениях близких к "круглым" - округляет или-же иррациональное выражение).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 05.08.2008, 17:04
#339
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


То есть получается, что вызывая
Код:
[Выделить все]
(_dwgru-conv-pickset-to-list selset)
Мы задаем value значение selset?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.08.2008, 17:09
#340
Кулик Алексей aka kpblc
Moderator

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


Ну типа того (если я только не запутался окончательно)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум 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