Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Lisp] построние имени ф-ции


Автор: integral 16.11.2006, 22:40
Есть набор ф-ций f1,  f2, ... и ф-ция fun . Ф-ция fun принимает число 1, 2, ... и в зависимости от этого числа вызывает соответственно ф-цию  f1, f2, ... . Как это написать (ф-цию fun), если возможно? smile 

Автор: VH_ 17.11.2006, 08:50
Код

(apply
 (cond
  ((= число 1) f1)
  ((= число 2) f2)
  ... 
 )
 [I]список_аргументов[/I]
)

Код

(apply
 (read (strcat "f" (itoa число)))
 [I]список_аргументов[/I]
)

Автор: adejneka 17.11.2006, 21:08
Код

(let ((funs (vector #'+ #'- #'* #'/)))
  (defun fun (n args)
    (apply (aref funs (1- n)) args)))

(fun 1 '(12 3)) => 15
(fun 2 '(12 3)) => 9
(fun 3 '(12 3)) => 36
(fun 4 '(12 3)) => 4

Автор: integral 18.11.2006, 17:59
Забыл написать, что cond использовать ненадо, а то сильно много выйдет писать smile Второй вариант подхолит, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)