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

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

Autolisp функция как аргумент другой функции

Ответ
Поиск в этой теме
Непрочитано 03.12.2010, 16:04 #1
Autolisp функция как аргумент другой функции
xsakabsx
 
Регистрация: 18.04.2010
Сообщений: 46

Как вместо переменной вставить функцию как аргумент ??

Код:
[Выделить все]
 
(defun xxx (a b)
  (princ a)
  (b)
  (princ)
)

(defun yyy ()
(command "_.zoom" "_all")
)
как вызвать функцию xxx чтобы вместо переменной b вставилась функция yyy
Просмотров: 2373
 
Непрочитано 03.12.2010, 16:53
#2
Дима_

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


ну таки и вызови
Код:
а вобще для передачи "напрямую":
Код:
[Выделить все]
(xxx 10 (lambda () (command "_.zoom" "_all")))
более того в лиспе ничто не запрещает сделать функцию, которая, не только принимает другую в качестве аргумента, но и возращает функцию - иногда - за счет этих двух приемов мне удавалось примерно вдвое сократить объем кода.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 03.12.2010, 16:58
#3
Лиспер


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
примерно вдвое сократить объем кода
А можно полюбопытствовать примерчиком?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 03.12.2010, 17:10
#4
Дима_

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


поверь их не мало и достаточно большие - выравать куски не буду - просто долго объяснять что-там к чему - вот тебе классический пример (который я тоже кстати не раз использовал) - есть список (lst) списков одинаковой длинны (таблица) - поменять местами строки со столбцами:
Код:
[Выделить все]
(apply 'mapcar (cons 'list lst))
попробуй написать "по своему" так, чтоб, не более чем в 2 раза длиней.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 06.12.2010, 08:01
#5
Лиспер


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


Дима_, я не стесняюсь учиться Мне было просто интересно.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 17.12.2010, 12:58
#6
xsakabsx


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


немного уточню вопрос
у меня сейчас так
Код:
[Выделить все]
(defun eql_mr_export ()
  (showall)
  (setq name (getvar 'dwgname))
  (setq path (getvar 'dwgprefix))
  (setq prefix "eql_mr")
  (setq fullname (strcat path name))
  (setq	exportfilename
	 (vl-string-subst
	   (strcat "_"  prefix  ".dwg")
	   ".dwg"
	   fullname
	   0
	 )
  )
  (all_off)
  (eql-mr_on)
  (rus_on)
  (command "_regen")
  (vl-file-delete exportfilename)
  (princ exportfilename)
  (setvar 'FILEDIA 0)
  (command "_.wblock" exportfilename "*")
  (setvar 'FILEDIA 1)
  (princ)
)
функцию (eql-mr_on) мне надо передать как аргумент (сама эта функция переключает слои как мне нужно)

я так и не смог понять как её вставлять аргументом (

подскажите люди умные !
буду очень признателен
xsakabsx вне форума  
 
Непрочитано 17.12.2010, 13:19
#7
Дима_

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


(defun функция_куда_надо_передать (F)
...
(F аргумент1 аргумент2...)
...)

(функция_куда_надо_передать eql-mr_on)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 17.12.2010, 13:42
#8
xsakabsx


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


to Дима_
тоесть как то так
Код:
[Выделить все]
 (defun eql_mr_export (insertfunc)
  (showall)
  (setq name (getvar 'dwgname))
  (setq path (getvar 'dwgprefix))
  (setq prefix "eql_mr")
  (setq fullname (strcat path name))
  (setq	exportfilename
	 (vl-string-subst
	   (strcat "_"  prefix  ".dwg")
	   ".dwg"
	   fullname
	   0
	 )
  )
  (all_off)
  insertfunc или так (insertfunc) немножко не понял
  (rus_on)
  (command "_regen")
  (vl-file-delete exportfilename)
  (princ exportfilename)
  (setvar 'FILEDIA 0)
  (command "_.wblock" exportfilename "*")
  (setvar 'FILEDIA 1)
  (princ)
)
а вызывать (eql_mr_export eql-mr_on )
xsakabsx вне форума  
 
Непрочитано 17.12.2010, 14:08
#9
Дима_

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


функция вызывается в скобках
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 17.12.2010, 14:15
#10
xsakabsx


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


понял буду пробовать
xsakabsx вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp функция как аргумент другой функции



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DwgRuLispLib: Функция открытия диалога Open\Save As файла (файлов) Supermax Библиотека функций 20 14.03.2018 10:05
Excel. Пользовательская функция замещения буквенных индексов числовыми AlphaGeo Программирование 2 06.07.2010 12:12
Тригонометрические функции и векторная алгебра Supermax Программирование 149 08.12.2009 22:22
Существует ли в АвтоКад функция растягиваия,аналогичная функции в Екселе? vladimir12051985 AutoCAD 6 11.10.2009 20:05
структурированный список Holon Программирование 22 11.09.2007 14:09