Page 1 of 1

list of functions question

Posted: Wed Jan 30, 2019 3:45 pm
by borisT
I'm a newbie, I'm trying to write some code that will select and run a function from a list of functions
Typically I'm doing something like this:

Code: Select all

(define (myfunc) (println "this is myfunc"))
	 
;; define a list of functions
(set 'funclist '(myfunc myfunc myfunc myfunc myfunc))

;; get and run the nth = 2 item of the list
(println "getting func")
(set 'afunc (funclist 2))
(println "calling func ")

(afunc)
Whatever I try I usully get the following error message:
getting func
calling func

ERR: invalid function : (afunc)
Could anyone explain what I'm, doing wrong?
Thanks.

Re: list of functions question

Posted: Thu Jan 31, 2019 12:50 am
by ralph.ronnquist
(funclist 2) is the symbol myfunc, and not its "value", which is the function.
Thus, you would need to use

Code: Select all

(set 'afunc (eval (funclist 2)))
so as to make afunc be a copy of the function named by the (funclist 2) symbol.

Re: list of functions question

Posted: Thu Jan 31, 2019 8:39 am
by borisT
Makes sense. Thanks for that.

Re: list of functions question

Posted: Mon Mar 04, 2019 12:18 pm
by newBert
(With some delay...)
I think we could also write: (set 'funclist (list myfunc myfunc myfunc myfunc myfunc)), so we don't need ‘eval’ in (set 'afunc (funclist 2))