Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) - Страница 143
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

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

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

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

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (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.
Просмотров: 2049488
 
Непрочитано 10.12.2015, 11:11
#2841
mkung


 
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Для начала отключи все дополнения, которые у тебя используются. Практически гарантирую, что проблема кроется в них.
Чаще всего это на AutoCAD Electrical происходит. Встречал вопросы по такой теме в Интернете.
Ну и набор софта стандартный... Как его менять?!
mkung вне форума  
 
Непрочитано 10.12.2015, 11:30
1 | #2842
Кулик Алексей aka kpblc
Moderator

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


В автозагрузку добавь лисп типа
Код:
[Выделить все]
 (vl-load-com)
(defun endmark()
(repeat 3 (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))))

(endmark)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.12.2015, 18:03
#2843
gomer

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


Цитата:
Сообщение от mkung Посмотреть сообщение
(if (= (rem (getvar "UNDOCTL") 2) 0) (command "_undo" "В"))
Первый раз вижу такой идиотизм...
1) Если группа отмен активна, она завершается
2) Новая группа отмен начинается ВСЕГДА!!!
gomer вне форума  
 
Непрочитано 28.12.2015, 14:55
#2844
Inferi


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


Добрый день, помогите преобразовать список:
(x1 y1 x2 y2 x3 y3 x4 y4...) => ((x1 y1 0.0) (x2 y2 0.0) (x2 y2 0.0) (x3 y3 0.0) (x3 y3 0.0) (x4 y4 0.0) (x4 y4 0.0)...)
Inferi вне форума  
 
Непрочитано 28.12.2015, 15:05
#2845
kurstep


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


Цитата:
Сообщение от Inferi Посмотреть сообщение
Добрый день, помогите преобразовать список:
(x1 y1 x2 y2 x3 y3 x4 y4...) => ((x1 y1 0.0) (x2 y2 0.0) (x2 y2 0.0) (x3 y3 0.0) (x3 y3 0.0) (x4 y4 0.0) (x4 y4 0.0)...)
Код:
[Выделить все]
 (setq spis (list 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 ))

(setq n -2
      a nil
spis2 nil
      )
(repeat (/ (length spis) 2)
  (setq n (+ 2 n))
  (setq a (list (nth n spis) (nth (1+ n) spis) 0.0))
  (setq spis2  (append  spis2 (list a))))
kurstep вне форума  
 
Непрочитано 28.12.2015, 15:40
#2846
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Код:
[Выделить все]
 (cdr
  ((eval
     (setq la0 (function (lambda (e00 / a00 a01)
                           (if (setq a00 (cddr e00))
                             (append (list (setq a01 (list (car e00) (cadr e00) 0.0)) a01) ((eval la0) a00)))))))
    '(1 2 3 4 5 6 7 8 9 0)))
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 28.12.2015, 16:10
#2847
Кулик Алексей aka kpblc
Moderator

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


Написано на коленке, критику приму, но переделывать не буду: некогда
Код:
[Выделить все]
 (defun list-to-3 (lst)
  (cond
    ((not lst) nil)
    ((= (length lst) 1)
     (list (list (car lst) 0. 0.))
     )
    ((= (length lst) 2)
     (list (list (car lst) (cadr lst) 0.))
     )
    (t
     (cons (list (car lst) (cadr lst) 0.) (list-to-3 (cddr lst)))
     )
    ) ;_ end of cond
  ) ;_ end of defun
Код:
[Выделить все]
 _$ (LIST-TO-3 '(1 2 3 4 5 6))
((1 2 0.0) (3 4 0.0) (5 6 0.0))
_$ (LIST-TO-3 '(1 2 3 4 5 ))
((1 2 0.0) (3 4 0.0) (5 0.0 0.0))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.12.2015, 16:34
#2848
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Цитата:
Сообщение от Inferi Посмотреть сообщение
Добрый день, помогите преобразовать список:
(x1 y1 x2 y2 x3 y3 x4 y4...) => ((x1 y1 0.0) (x2 y2 0.0) (x2 y2 0.0) (x3 y3 0.0) (x3 y3 0.0) (x4 y4 0.0) (x4 y4 0.0)...)
(x1 y1 0.0) - встречается только один раз?
И да, если список из двух элементов, то поправил:
Код:
[Выделить все]
 (cdr
  ((eval
     (setq la0 (function (lambda (e00 / a00 a01)
                           (if (setq a00 (cddr e00))
                             (append (list (setq a01 (list (car e00) (cadr e00) 0.0)) a01) ((eval la0) a00))
                             (list (append (mapcar (function (lambda (e10)
                                                               (if e10
                                                                 e10
                                                                 0.0)))
                                                   (list (car e00) (cadr e00)))
                                           '(0.0))))))))
    '(1 1 2 2 3 3 4 4 5)))
__________________
На работе было скучно:shout:

Последний раз редактировалось ciril, 28.12.2015 в 16:48.
ciril вне форума  
 
Непрочитано 28.12.2015, 16:47
#2849
Inferi


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


Первый и последний элемент по задумке встречается только один раз. Спасибо всем!
Inferi вне форума  
 
Непрочитано 28.12.2015, 16:49
#2850
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Цитата:
Сообщение от Inferi Посмотреть сообщение
Первый и последний элемент по задумке встречается только один раз. Спасибо всем!
вдогон поправил
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 28.12.2015, 16:52
#2851
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Чет как-то сложно у вас тут.

Код:
[Выделить все]
 (defun Lst->Flat3D (lst)
   (if lst
    (cons (list (car lst) (cadr lst) 0.0)
	  (Lst->Flat3D (cddr lst))
    )
   )
  )
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
 
Непрочитано 28.12.2015, 16:55
#2852
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Первый элемент в результирующем встретится только один раз?
Последний элемент встретиться только один раз?
Остальные элементы дублируются?
Каждый третий элемент куда денется? Гы
А так, да, сложно ))
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 28.12.2015, 17:00
#2853
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Цитата:
Сообщение от ciril Посмотреть сообщение
Первый элемент в результирующем встретится только один раз?
Последний элемент встретиться только один раз?
Остальные элементы дублируются?
Каждый третий элемент куда денется? Гы
А так, да, сложно ))
С какой стати дублироваться каким-то элементам и встречаться вновь первому и последнему? О каком третьем элементе идет речь?
Просто коды описанные выше, это какое-то извращение прям. В них сам черт ногу сломит.
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
 
Непрочитано 28.12.2015, 17:41
#2854
Кулик Алексей aka kpblc
Moderator

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


ProPeller, ты в свой код подставь список длиной 5 символов
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.12.2015, 23:11
#2855
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Цитата:
Сообщение от ProPeller Посмотреть сообщение
С какой стати дублироваться каким-то элементам и встречаться вновь первому и последнему? О каком третьем элементе идет речь?
Просто коды описанные выше, это какое-то извращение прям. В них сам черт ногу сломит.
А ты почитай, как требовалось преобразовывать список и решения предлагай согласно, хм, ТЗ
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 28.12.2015, 23:20
#2856
Кулик Алексей aka kpblc
Moderator

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


Я начинаю подозревать, что человек хочет по списку точек строить массив отрезков.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.12.2015, 08:06
#2857
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Или препод ему дал задачу, которая предполагает в дальнейшем построение отрезков, но сейчас его не содержит, ибо строй себе отрезки, кто же мешает, нафига весь список волочь.
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 29.12.2015, 08:49
#2858
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Цитата:
Сообщение от ciril Посмотреть сообщение
А ты почитай, как требовалось преобразовывать список и решения предлагай согласно, хм, ТЗ
Сорян. Я что-то и правда затупил ))
Конец рабочего дня и бла-бла-бла ))
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
 
Непрочитано 12.01.2016, 15:53
#2859
Inferi


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


Всем доброго дня! Хочу вывести две строчки рядом с курсором. Нашел много полезных лиспов, в частности очень понравилась реализация от Евгения Елпанова: http://www.theswamp.org/index.php?topic=32971.0
Вопрос следующий, можно ли малой кровью добиться, чтобы функция Евгения (eea-abc str cb cf) выводила динамически изменяющиеся строчки (как изначально реализовано через prompt):
Код:
[Выделить все]
 ;*****************************************************************************
; INSPECTOR - Command to Inspect Objects by Moving the Crosshairs Over Them. *
; =========                                                                  *
;             Didge, 2006.                                                   *
;*****************************************************************************
(defun C:INSPECTOR (/ INPUT INPUT_COORD ENTITY_FOUND ENTITY_NAME ENTITY_LIST ENTITY_TYPE ENTITY_LAYER)
  (prompt "\nMove Crosshairs To Inspect Objects.")
  (while (and (setq INPUT (grread T)) (= (car INPUT) 5))
      (setq INPUT_COORD (cadr INPUT))
      (setq ENTITY_FOUND (ssget INPUT_COORD))
      (if ENTITY_FOUND
         (progn
	    (setq ENTITY_LIST (entget (ssname ENTITY_FOUND 0)))
            (setq ENTITY_TYPE (cdr (assoc 0 ENTITY_LIST)))
            (setq ENTITY_LAYER (cdr (assoc 8 ENTITY_LIST)))
	    ;(prompt (strcat "\rObject: " ENTITY_TYPE "    Layer: " ENTITY_LAYER "                     "))
            (eea-abc (strcat ENTITY_TYPE "\n" ENTITY_LAYER) 7 5)
	 )
      )
  )
  (princ)
)
Через форум находил готовые решения от Lee Mac, но там проблемы с кириллицей. Спасибо за внимание!

Последний раз редактировалось Кулик Алексей aka kpblc, 12.01.2016 в 16:17.
Inferi вне форума  
 
Непрочитано 12.01.2016, 16:39
#2860
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Цитата:
Сообщение от Inferi Посмотреть сообщение
Всем доброго дня! Хочу вывести две строчки рядом с курсором. Нашел много полезных лиспов, в частности очень понравилась реализация от Евгения Елпанова: http://www.theswamp.org/index.php?topic=32971.0
Вопрос следующий, можно ли малой кровью добиться, чтобы функция Евгения (eea-abc str cb cf) выводила динамически изменяющиеся строчки (как изначально реализовано через prompt):[/lisp][/code]
Через форум находил готовые решения от Lee Mac, но там проблемы с кириллицей. Спасибо за внимание!
Функцию eea-abc-то покажите

----- добавлено через ~4 мин. -----
И куда должны выводиться и какие динамические строчки?
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
Ответ
Вернуться   Форум 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