newLISP Fan Club

Forum => newLISP in the real world => Topic started by: bugmagnet on March 17, 2013, 01:47:51 AM

Title: NEWBIE-ish: data as code
Post by: bugmagnet on March 17, 2013, 01:47:51 AM
It's been a few years since I last did anything with NewLISP. I ought to know the answer to this ...



Can I use data as code? Can I have the name of a function in a string variable and execute the contents of that variable as if it were the name of a function? For example:



(set 'f "even?")
(f 2.5)


As it stands, that'll give "e" because NewLISP will be thinking I want the 3rd character in the 'f variable. How do I get "even?" to execute against 2.5 (or am I hoping for too much)?



Kind regards,

Bugmagnet
Title: Re: NEWBIE-ish: data as code
Post by: bugmagnet on March 17, 2013, 02:50:37 AM
Hmm ... (reading the friendly manual) ... eval-string would seem to be best approach, yes?
Title: Re: NEWBIE-ish: data as code
Post by: cormullion on March 18, 2013, 04:11:59 AM
Yes, code is data is code, true, but code consists of strings, symbols, and numbers. So you'll need to move between the different elements of code, using functions such as as eval-string and sym:


(set 'f "even?")
(apply (sym f) '(2))
;-> true
(map (sym f) '(2 3 4 5))
;-> (true nil true nil)
(map (eval-string "even?") '(2 3 4 5))
;-> (true nil true nil)
(eval-string "(even? 3)")
;-> nil
(eval (read-expr "(even? 4)"))
;-> true