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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Передача параметров процедуре на LISP

Передача параметров процедуре на LISP

Ответ
Поиск в этой теме
Непрочитано 19.05.2010, 13:04 #1
Передача параметров процедуре на LISP
Player
 
Регистрация: 10.08.2009
Сообщений: 5

Подскажите, существуют старые процедуры написанные на LISP. Суть их в следующем: они принимают параметры, и на основе введенных параметров вычерчиваются определенные соединительные детали трубопроводов (тройники, отводы и т.д.).

Параметры вводятся пользователем с клавиатуры в диалоговом режиме.

Вопрос такой: можно как-то по-другому передать эти параметры в лисповскую процедуру? Можно ли на ЛИСПе разобрать содержимое буфера обмена (например, передать в нём параметры текстом с разделителями)? Может ещё что-то предложите?

Спасибо
Просмотров: 7037
 
Непрочитано 19.05.2010, 13:08
#2
Елпанов Евгений

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


Да, можно. В том числе с буфером обмена, текстом итд...
Елпанов Евгений вне форума  
 
Непрочитано 19.05.2010, 13:20
#3
Capiton


 
Регистрация: 11.03.2009
Тюмень
Сообщений: 109
<phrase 1=


Не силен в Тройниках и отводах, но если суть проблеммы такова:
есть набор стандартных деталей для каждой из которых существует рряд параметров и Автокад каждый раз запрашивает в коммандной строке все эти параметры по очереди (а их может быть много), то всё решается диалоговым окном "помнящим" пераметры последней или наиболее распостраненной детали каждого типа из набора.
Если задача другая, то и решений может быть несколько в зависимости от типа задачи: забирать данные из Exel или Open Office calc, через временные файлы и проч.
Capiton вне форума  
 
Непрочитано 19.05.2010, 13:51
#4
Дима_

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


По сути параметры можно задать практически любым мыслимым способом - через файл, через COM (а там и ADO - то есть практически любая БД и мс-офис), виндовый реестр, при желании можно и с устройства снять (возможно придеться какой-нибудь COM драйверок написать). Так-же есть пара способов (стандартный и не очень) создания диалоговых окон - вобщем лисп могуч.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 19.05.2010, 15:35
#5
Player


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


Capiton
почти правильно - единственное, но, диалоговое окно уже реализовано - это отдельная программа работающая с базой оборудования. Пользователь выбирает в этой проге интересующее его оборудование которое он хочет добавить на чертеж. Моя задача как-то передать параметры для вычерчивания и запустить процедуру на LISP которая, основываясь на переданных параметрах, начертит соотв. деталь.

Всем спасибо за ответы
Player вне форума  
 
Непрочитано 19.05.2010, 15:49
#6
Дима_

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


Так в чем проблема-то? Процедуру запустить не можешь или нужна программа которая рисовать будет?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 19.05.2010, 15:51
#7
Кулик Алексей aka kpblc
Moderator

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


Есть три варианта:
  • реализовать это диалоговое окно как СОМ-сервер и работать с ним из-под lisp'а.
  • использовать уже в самом диалоге нечто типа AcadApplication.ActiveDocument.SendCommand
  • использовать из-под диалога обращение к объектной модели AutoCAD'a (то есть уже AutoCAD использовать как СОМ-сервер).
Сугубо ИМХО, как всегда.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.05.2010, 16:14
#8
Player


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


Дима_ проблема была в том, что я не знал можно ли передавать параметры в процедуры LISP извне акада. Сейчас все прояснилось.

Кулик Алексей aka kpblc вот-вот, правда недопонял чем отличаются пункты 2 и 3.

Я планирую подключатся через позднее связывание к АвотоКАДу и запускать ЛИСПовскую ф-цию, которая считает переданные параметры из файла/реестра/буфера_обмена и вычертит по ним соотв. деталь.

Второй вариант, я из проги запускаю ЛИСПовскую ф-цию и помере её запросов параметров автоматически подкидываю их (из своей программы).

Второй вариант гораздо предпочтительнее так как не потребует изменений существующих ф-ций вычерчивания на Лиспе. Возможен ли он в принципе?

В случае первого варианта ф-ции на лиспе прийдется переписать, чтоб они брали параметры не от пользователя, а, например, из буфера обмена.
Player вне форума  
 
Непрочитано 19.05.2010, 16:17
#9
Кулик Алексей aka kpblc
Moderator

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


В п.2 фактически запускается лисп0функция. В п.3 никаких лисп-функций не запускается, и вся работа выполняется через соответствующие методы и свойства примитивов (и не только примитивов )

P.S.
Цитата:
В случае первого варианта ф-ции на лиспе прийдется переписать, чтоб они брали параметры не от пользователя, а, например, из буфера обмена.
Не совсем так. Понадобится переписать СОМ-сервер так, чтобы по завершении диалогового окна он еще не уничтожался и получал некие значения предопределенных свойств.
Цитата:
Второй вариант гораздо предпочтительнее так как не потребует изменений существующих ф-ций вычерчивания на Лиспе. Возможен ли он в принципе?
Возможен. Но я бы не делал на него ставку (бывают ситуации, когда применение SendCommand недопустимо).
ИМХО: зачем использовать файловые операции или работу с реестром, когда можно попытаться обойтись без нее?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.05.2010, 16:19
#10
Capiton


 
Регистрация: 11.03.2009
Тюмень
Сообщений: 109
<phrase 1=


Есть еще способ. Он не совсем честный и возможно использовать его не всегда, но зато не надо лезть в СОМ. Данные, которые использует программа с диалогом часто бывают в файле легко и наглядно открываемом блокнотом. Посмотреть структуру - "нарисовать" своё диалоговое окно - написать простой LISP - всё готово. Не собираетесь распостранять получившуюся программу- Вы кристально чисты.
Capiton вне форума  
 
Непрочитано 19.05.2010, 16:21
#11
Кулик Алексей aka kpblc
Moderator

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


Как я понял, диалог как раз реализован на "нормальном" языке типа C++ / C# / Vb.NET / Delphi etc, и посмотреть его структуру уже шансов маловато...
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.05.2010, 16:29
#12
Capiton


 
Регистрация: 11.03.2009
Тюмень
Сообщений: 109
<phrase 1=


Часто программы написаные на C++ / C# / Vb.NET / Delphi и любых других языках хранят данные в отдельном легко просматриваемом файле (группе файлов), к которому и обращаются. Программисты не запихивают его внутрь, по разным причинам(может, чтобы пользователь мог легко редактировать или еще почему-то) Про такой файл я говорил.
Capiton вне форума  
 
Непрочитано 19.05.2010, 17:57
#13
ShaggyDoc

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


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

В том числе из файла, реестра, через память. С диалоговым окном или без. Вот буфер обмена - пожалуй наихудший вариант.
ShaggyDoc вне форума  
 
Непрочитано 19.05.2010, 18:20
#14
gomer

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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
в LISP нет вообще никаких "процедур" - только функции. Функциям передаются аргументы. А передать аргументы можно множеством способов.

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

И вообще: архив в студию, тогда можно о чем-либо говорить...
gomer вне форума  
 
Непрочитано 19.05.2010, 20:37
#15
Дима_

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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
И никто не сказал, что в LISP нет вообще никаких "процедур" - только функции.
ну допустим не только - например if, or, and - совсем не являются функциями - названиям им куча и специальные формы, и операторы и процедуры кто как переведет да и в зависимости от диалекта лиспа. Но по сути они никак не функции.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 19.05.2010, 22:59
#16
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,283
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
ну допустим не только - например if, or, and - совсем не являются функциями - названиям им куча и специальные формы, и операторы и процедуры кто как переведет да и в зависимости от диалекта лиспа. Но по сути они никак не функции.
Это в других языках они операторы - в LISP'е только функции. Именно в этом принципиальное отличие этого языка от большинства других. Ну а как их переводят переводчики на суть не влияет.
Александр Ривилис вне форума  
 
Непрочитано 19.05.2010, 23:24
#17
Дима_

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


Оп оп оп? А нука - попробуйте написать (на лиспе разумеется), ну например, подобие функции if, причем даже с возможностью использовать внутри стандартную if - назовем например AR-if (Александр Ривлис) - и выложите код - а там посмотри что такое оригинальная if - функция или нет.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 19.05.2010, 23:48
#18
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 170


Код:
[Выделить все]
(defun xif (testexpr thenexpr elseexpr)
  (cond	(testexpr thenexpr)
	(t elseexpr)
  )
)
;;;(xif (= 1 2) "yes" "no")
Vov.Ka вне форума  
 
Непрочитано 19.05.2010, 23:53
#19
Кулик Алексей aka kpblc
Moderator

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


Ну, полностью от if избавиться не удалось, но в качестве "разминки":
Код:
[Выделить все]
(defun ar-if (condition function-yes function-not)
  (cond
    (condition
     (eval function-yes)
     )
    (t (eval function-not))
    ) ;_ end of cond
  ) ;_ end of defun
Пример:
Код:
[Выделить все]
_$ (ar-if (equal 1 1) '((LAMBDA() princ "\nYes")) nil)
"\nYes"
_$ (ar-if (equal 1 2) '((LAMBDA() princ "\nYes")) '((LAMBDA() princ "\nNo")))
"\nNo"
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.05.2010, 07:44
#20
Дима_

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


То vovka вся беда в твоем if что перед тем как дойдет дело до выполнения функции все ТРИ аргумента будут уже вычесленны, как впрочем и у любой функции - вначале вычисляються аргументы. Крыс верно написал - именно так она и реализованна на самом деле, с той лишь разницей что в функцию добален парсинг - что выполнять а что нет - посему это никак не функция. В and и or то же самое - операнды выполняются последавательно (а не вычисленны все до начала функции).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Передача параметров процедуре на LISP

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SolidWorks : Обновление таблиц параметров виртуальных деталей MAKSCHUK SolidWorks 10 15.02.2013 13:53
LISP & VBA. Передача данных. Кулик Алексей aka kpblc Готовые программы 8 29.06.2009 22:16
Запуск Lisp команды в новом документе BlackHarp LISP 1 26.03.2009 23:06
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19