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

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

Как выполнить функцию переданную в качестве аргумента.

Ответ
Поиск в этой теме
Непрочитано 08.12.2009, 16:48 #1
Как выполнить функцию переданную в качестве аргумента.
Дима_
 
Продуман
 
Питер
Регистрация: 22.02.2007
Сообщений: 2,839

Друзья подскажите, надо каким-то образом запустить функцию переданную в виде списка, точно это делал, но возможно, это был не autolisp (common - хотя возможно, там это через defmacro - что-то головушка совсем не соображает - запутался в диалектах и языках). Надо что то вроде
(defun test (x func)
;здесь каким-то волшебным способом запустить func(x)
);end of test
и типа при запуске (test 5 '(* x 2)), возращалось-бы 10.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Просмотров: 2896
 
Непрочитано 08.12.2009, 17:02
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
(defun test1 (y)(* y 2))
(defun test (x func)
  ((EVAL func) x)
;здесь каким-то волшебным способом запустить func(x)
);end of test

;;;пРИМЕР
(test 5 'test1)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.12.2009, 17:06
#3
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Код:
[Выделить все]
 
(defun test (x f)
  (eval f)
)
(test 5 '(* x 5))
Упс... опоздал...

Последний раз редактировалось CB, 08.12.2009 в 17:13.
CB вне форума  
 
Автор темы   Непрочитано 08.12.2009, 17:12
#4
Дима_

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


ААА!!! - все верно, посмотрел на твой код и сразу вспомнил - вот так это было:
Код:
[Выделить все]
(defun test (x func)
(apply (car func) (cdr (subst x 'x func)))
);end of test
ну или если "перииначить" твой:
Код:
[Выделить все]
(defun test (x func)
(eval (subst x 'x func))
);end of test
Спасибо всем - даже полегчало на душе.

p.s. СВ - вобще круто
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 08.12.2009, 17:18
#5
Елпанов Евгений

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


возможно, имеется в виду функция LET из СommonLisp?
Код:
[Выделить все]
(setq x 2 y 4)
(let '((x 3)
       (y (+ x 2)))
     '(* x y))
тогда на AutoLISP, функция будет выглядеть так:
Код:
[Выделить все]
(defun let(a b)
 (eval (cons (list 'lambda (mapcar 'car a) b) (mapcar 'cadr a)))
)
ps. всем интересующимся, будет интересно почитать книгу "Структура и интерпретация компьютерных программ" - побольше бы таких книг...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как выполнить функцию переданную в качестве аргумента.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как запроектировать жесткий узел с трубой в качестве стойки? Chief Justice Конструкции зданий и сооружений 16 04.01.2013 12:19
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46
БРЕД СИВОЙ КОБЫЛЫ Kryaker Разное 1876 29.12.2006 23:41
Как написать функцию, которая возвращает неск. результатов? kp+ Программирование 9 14.01.2006 02:00