|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Есть ли в Autolisp возможность задавать необязательные параметры для функций?
Регистрация: 02.07.2016
Сообщений: 249
|
||
Просмотров: 6180
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,485
|
Можно, почему нет. Как вариант: http://autolisp.ru/2009/10/21/lisp-overloading/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,485
|
Количество параметров в AutoLISP задается один раз. Полноценного "переопределения" / "перегрузки" функций тут нет.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,485
|
Я так понял, что ТС хочет получить нечто типа:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
похоже ТС хочет что бы работало как на VB
Код:
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Собственно ответили уже, но для ясности:
1. Автолисп - язык функциональный. В нем нет вообще "параметров", а есть аргументы функций. "Это вам не лезгинка, а твист"! 2. На Автолисп сделать функцию с переменным количеством аргументов нельзя. 3. Но аргументы могут быть разного типа. В том числе списки. В том числе NIL. Как обрабатывать разные типы аргументов должно быть прописано в теле функции. 4. Если один или несколько аргументов являются списками, внутри следует обращаться к элементам списка по их номеру функцией nth или функциями car, cdr и им подобным - как удобнее. 5. Если "нельзя, но очень хочется", надо написать функцию с одним обязательным аргументом. А вызывать её уже можно по разному. Вызов (my_fun nil) будет соответствовать вызову без "параметров", но с одним аргументом, а вызов (my_fun (list 1 2 3 fig vam)) - переменное количество "параметров", но по-прежнему один аргумент. 6. В других языках, где допускается переменное количество аргументов в описании процедуры или функции указывается, какое значение присваивается опущенному при вызове параметру. В Автолисп это надо прописывать внутри тела функции. |
|||
![]() |
|
||||
Средствами ObjectARX и AutoCAD .NET API можно создать lisp-функцию с переменным числом аргументов. По аналогии с некоторыми встроенными функциями AutoLisp, которые тоже могут принимать различное число аргументов. Например, (+ ...) или (mapcar ...)
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка Последний раз редактировалось Александр Ривилис, 06.07.2016 в 22:37. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
!!! ВНИМАНИЕ ОПРОВЕРЖЕНИЕ !!!
В качестве разминки для ума и проверки на смекалку - я даю 100% гарантию, что можно создать автолисп функцию на чистом автолиспе с переменным количеством аргументов, но вот правда практический смысл таких функций будет весьма ограничен - на разгадку даю 2 дня.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,485
|
Уточнение: функция должна быть именована.
Сильно подозреваю, что ты имеешь в виду определение не через defun, а через defun-q (которым, к стыду своему, я не пользуюсь).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
Цитата:
тут не знания, а смекалка на первом месте
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,485
|
Ок, уболтал. Но условие остается прежним: функция должна иметь собственное имя
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
кАнечно - имя будет какое захочешь
![]() ----- добавлено через ~10 мин. ----- Кому - 2 дня будет мешать спать и работать - пишите публично "Сдаюсь" - ответ пришлю в личку.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 14.07.2016 в 08:59. |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,181
![]() |
Пока думал над вопросом, обнаружил интересный способ записи неименованных функций, может это общеизвестно, но для меня было открытием:
Код:
__________________
apel.fas |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,485
|
skkkk, я так понимаю, что надо создать функцию, которая корректно будет работать при вызовах типа:
(fun) (fun nil) (fun t "a") (fun 1 2 "c" t nil) (fun '(1 2)) При этом функция должна вызываться именно в стандартном варианте кода, без применения eval и read.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Есть ли возможность вставить в вершины полилинии блоки? | bimari | AutoCAD | 29 | 04.06.2021 14:49 |
Есть возможность уменьшить объект в ширину, а длина должна остаться не изменой? | виктоша17 | AutoCAD | 4 | 29.03.2014 12:32 |
Есть ли в Civil 3D возможность выравнивания дорожного покрытия? | 19th | Вертикальные решения на базе AutoCAD | 4 | 30.03.2009 17:48 |
Запись макросов VBA в ACAD`e; возможность есть? | ssv22 | Программирование | 9 | 19.02.2009 20:22 |
Есть ли возможность при вставке блока разрывать линии | Незнайка | AutoCAD | 13 | 03.04.2006 20:34 |