|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
defun и факультативный аргумент
архитектор
Москва
Регистрация: 07.07.2007
Сообщений: 664
|
||
Просмотров: 4945
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
В lisp'e все аргументы обязательны. Другой вопрос, что это можно немного обойти: http://autolisp.ru/2009/10/21/lisp-overloading/
Весь лисп - для работы с массивами. Точнее, со списками. Что конкретно интересует?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Цитата:
Есть ли что то подобное вот этому: http://www.wolframalpha.com/input/?i=det%28{{7.5%2C+6.25%2C+z-18}%2C+{0%2C+25%2C+18}%2C+{15%2C+0%2C+-18}}%29 Что бы сразу определить детерминанту. Правилен ли подход к решению методом треугольников матриц, использованный мной тут: http://forum.dwg.ru/showthread.php?p=714567 |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ничего не понял
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Объясню, Способ в #2 хорош, например при создании примитивов, обработке массива точек...
Если исходные данные имеют всего несколько параметров, то можно задавать параметры как nil и программа, видя такое, будет подхватывать значения по умолчанию, например Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
По моему личному опыту: если параметров больше 2, а функций хотя бы десяток, то удержать их в памяти - какой параметр что означает и в какой последовательности они идут... Уже тяжко.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Отлично! Что делает такая строка:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Код:
Цитата:
|
|||
![]() |
|
||||
Регистрация: 20.05.2010
Сообщений: 26
|
«В lisp'e все аргументы обязательны...»
Скорее, в диалекте AutoLISP все аргументы (defun) обязательны. А в CommonLISP (и XLISP-PLUS) возможностей побольше: (defun имя (обязательный_аргумент... &optional необязательный_аргумент... &rest оставшийся_аргумент &key ключевой_аргумент... &aux локальный_аргумент...) ...) Предлагаемый аргумент-список скорее соответствует &rest оставшийся_аргумент. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Вроде все правильно пишут, но как-то заумно, чтобы запутать новичков.
Давайте проще: 1. Рассматриваем только диалект LISP, используемый в AutoCAD. 2. LISP-функции могут быть двух видов: а) Штатные, а также экспортированные из ARX. В таких функциях может быть переменное количество аргументов. Они написаны не на AutoLISP, а возможность "факультативных" переменных определяется языком реализации. б) "Пользовательские", написанные на самом AutoLISP. В таких фунциях не может быть переменного количества аргументов. Сколько "штук" записано в определении defun, столько "штук" и должно передаваться в каждом вызове. А вот типы аргументов могут быть любые. В том числе и список. А уж в самом списке может быть любое количество элементов. Если, например, нужна функция обработки заранее неизвестного количества точек, то точки должны передаваться одним аргументом - списком. Обработка списка должна производиться внутри функции. Некоторые аргументы могут передаваться в виде NIL. Обычно предполагается, что внутри функции такие аргументы заменяются на какие-то значения по умолчанию. Вот, для примера, определение функции рисования полилинии: Код:
points - список координат вершин is_closed - признак замкнутости или NIL, если не замкнута width - физическая ширина полилинии или NIL, если использовать текущую. lineweight - "вес" полилинии или NIL, если использовать текущий ltype - тип линииили NIL, если использовать текущий Количество аргументов при вызове всегда должно быть ровно 5. Количество вершин в списке points может быть любым. PS. Слово "массив" в отношении LISP лучше вообще не употреблять - это происки "сионистов". Чтоб охмурить... |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
Цитата:
Например в Framework метод Concat имеет несколько перегрузок, куда можно ввести две, либо три, либо четыре строки. Гениальная реализация, человеку писавшему на лиспе просто не понятно почему нельзя конкатенировать сколько угодно строк, а когда узнаешь как реализовать конкатенацию произвольного кол-ва строк, плохо становится. Это вобщем-то не сложно, но чтобы пойти этим путем нужно быть профи, и чтобы написать даже простенькую программку нужно понимать все принципы ООП. |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объединение разбитого на слова текста | Mist | AutoCAD | 46 | 24.05.2020 21:08 |
AUTOCAD 2010 перестал переключаться в многооконный режим. Проблемы с переменными | Андрей Х. | AutoCAD | 24 | 27.05.2015 10:17 |
AutoCAD2010 выдает 82 отчета об ошибке за раз | Nusia | AutoCAD | 22 | 29.08.2012 16:11 |
Express Tools Bugs ( Ошибки Express Tools ) | VVA | Программирование | 49 | 02.02.2012 20:35 |
3D Konstruktor для проектировщиков КМ. | Дима_ | Готовые программы | 17 | 10.07.2008 10:03 |