Re: misunderstanding executing data as code
Joh-Tob >One does not simply say that the pil interpreter is missunderstanding. "One" didn't :) but thank you for your solution and for explaining what Alex meant by >readable, Lisp-style formatted code for your posts. Christophe Thank you for correcting Joh-Tob straight and for your solution. Alex Thank you for your solution and in the future I'll try to narrow my code and pp my functions. Best Regards Dean On 11 December 2016 at 07:52, Joh-Tob Schäg wrote: > You can produce a readable version of a function by (pp 'function) > > 2016-12-11 8:12 GMT+01:00 Alexander Burger : > >> Hi Dean, >> >> first of all, could you please try to produce some readable, Lisp-style >> formatted code for your posts? If possible, boiled-down and simplified >> to the essence? >> >> >> On Sat, Dec 10, 2016 at 10:01:18PM +, dean wrote: >> > The following program shows me trying to extract a function name from a >> > "string" and execute the function using the string. >> > The function is called some_fn. >> > If I type (some_fn) directly...all is well. >> > When I first executed (Fn) that I THOUGHT held the function name...it >> > didn't so I dropped into the REPL and played until I got (some_fn) >> returned >> > i.e. by (str (glue "" Fn)) i.e. -> (some_fn) >> > I thought putting this in my program would call some_fn but it doesn't >> and >> > I don't understand why. >> > Thank you in anticipation >> > Dean >> > >> > (setq Lmnu >> > '(mAin_mnu-some_fn)) >> > >> > (de some_fn () >> >(prinl "yes in some_fn")) >> > >> > (de lmnu_to_mnu_tbl (Lmnu Lkey) >> >(for Ele Lmnu >> > ( >> > ifn (car Ele) >> > (prog >> >(setq Optn_fn_pair (split (chop Ele) '-)) >> >(setq Optn (get Optn_fn_pair 1)) >> >(setq Fn (get Optn_fn_pair 2)) >> > >> >(some_fn) #this worked fine >> > >> > #! >> > #: (Fn) #this didn't 'cos Fn contained "s" "o" "m". >> > #-> "n" >> > #: (glue "" Fn) >> > #-> "some_fn" >> > #: (str (glue "" Fn)) #this looked to evaluate to (some_fn) which >> worked >> > above >> > #-> (some_fn) >> > >> >#(str (glue "" Fn)) #but executing it didn't call some_fn >> >#((str (glue "" Fn))) #nor did evaluating what got >> returned >> > ) >> > (prog >> ># (printsp Ele 'is 'a 'list) >> ># (prinl) >> > ) >> > ) >> >) >> > ) >> > >> > (debug 'lmnu_to_mnu_tbl) >> > (lmnu_to_mnu_tbl Lmnu ()) >> >> >> If I get you right, you have a symbol 'mAin_mnu-some_fn', and want to >> extact >> the part after the "-" and execute it as a function? Then you could >> >>((intern (pack (cadr (split (chop 'mAin_mnu-some_fn) "-") >> >> >> Or, if you want to keep the function in a variable 'F' >> >>(let F (intern (pack (cadr (split (chop 'mAin_mnu-some_fn) "-" >> (F) ) >> >> Cheers, >> - Alex >> -- >> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe >> > >
Re: misunderstanding executing data as code
You can produce a readable version of a function by (pp 'function) 2016-12-11 8:12 GMT+01:00 Alexander Burger : > Hi Dean, > > first of all, could you please try to produce some readable, Lisp-style > formatted code for your posts? If possible, boiled-down and simplified > to the essence? > > > On Sat, Dec 10, 2016 at 10:01:18PM +, dean wrote: > > The following program shows me trying to extract a function name from a > > "string" and execute the function using the string. > > The function is called some_fn. > > If I type (some_fn) directly...all is well. > > When I first executed (Fn) that I THOUGHT held the function name...it > > didn't so I dropped into the REPL and played until I got (some_fn) > returned > > i.e. by (str (glue "" Fn)) i.e. -> (some_fn) > > I thought putting this in my program would call some_fn but it doesn't > and > > I don't understand why. > > Thank you in anticipation > > Dean > > > > (setq Lmnu > > '(mAin_mnu-some_fn)) > > > > (de some_fn () > >(prinl "yes in some_fn")) > > > > (de lmnu_to_mnu_tbl (Lmnu Lkey) > >(for Ele Lmnu > > ( > > ifn (car Ele) > > (prog > >(setq Optn_fn_pair (split (chop Ele) '-)) > >(setq Optn (get Optn_fn_pair 1)) > >(setq Fn (get Optn_fn_pair 2)) > > > >(some_fn) #this worked fine > > > > #! > > #: (Fn) #this didn't 'cos Fn contained "s" "o" "m". > > #-> "n" > > #: (glue "" Fn) > > #-> "some_fn" > > #: (str (glue "" Fn)) #this looked to evaluate to (some_fn) which > worked > > above > > #-> (some_fn) > > > >#(str (glue "" Fn)) #but executing it didn't call some_fn > >#((str (glue "" Fn))) #nor did evaluating what got > returned > > ) > > (prog > ># (printsp Ele 'is 'a 'list) > ># (prinl) > > ) > > ) > >) > > ) > > > > (debug 'lmnu_to_mnu_tbl) > > (lmnu_to_mnu_tbl Lmnu ()) > > > If I get you right, you have a symbol 'mAin_mnu-some_fn', and want to > extact > the part after the "-" and execute it as a function? Then you could > >((intern (pack (cadr (split (chop 'mAin_mnu-some_fn) "-") > > > Or, if you want to keep the function in a variable 'F' > >(let F (intern (pack (cadr (split (chop 'mAin_mnu-some_fn) "-" > (F) ) > > Cheers, > - Alex > -- > UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe >
Re: misunderstanding executing data as code
Hi Dean, first of all, could you please try to produce some readable, Lisp-style formatted code for your posts? If possible, boiled-down and simplified to the essence? On Sat, Dec 10, 2016 at 10:01:18PM +, dean wrote: > The following program shows me trying to extract a function name from a > "string" and execute the function using the string. > The function is called some_fn. > If I type (some_fn) directly...all is well. > When I first executed (Fn) that I THOUGHT held the function name...it > didn't so I dropped into the REPL and played until I got (some_fn) returned > i.e. by (str (glue "" Fn)) i.e. -> (some_fn) > I thought putting this in my program would call some_fn but it doesn't and > I don't understand why. > Thank you in anticipation > Dean > > (setq Lmnu > '(mAin_mnu-some_fn)) > > (de some_fn () >(prinl "yes in some_fn")) > > (de lmnu_to_mnu_tbl (Lmnu Lkey) >(for Ele Lmnu > ( > ifn (car Ele) > (prog >(setq Optn_fn_pair (split (chop Ele) '-)) >(setq Optn (get Optn_fn_pair 1)) >(setq Fn (get Optn_fn_pair 2)) > >(some_fn) #this worked fine > > #! > #: (Fn) #this didn't 'cos Fn contained "s" "o" "m". > #-> "n" > #: (glue "" Fn) > #-> "some_fn" > #: (str (glue "" Fn)) #this looked to evaluate to (some_fn) which worked > above > #-> (some_fn) > >#(str (glue "" Fn)) #but executing it didn't call some_fn >#((str (glue "" Fn))) #nor did evaluating what got returned > ) > (prog ># (printsp Ele 'is 'a 'list) ># (prinl) > ) > ) >) > ) > > (debug 'lmnu_to_mnu_tbl) > (lmnu_to_mnu_tbl Lmnu ()) If I get you right, you have a symbol 'mAin_mnu-some_fn', and want to extact the part after the "-" and execute it as a function? Then you could ((intern (pack (cadr (split (chop 'mAin_mnu-some_fn) "-") Or, if you want to keep the function in a variable 'F' (let F (intern (pack (cadr (split (chop 'mAin_mnu-some_fn) "-" (F) ) Cheers, - Alex -- UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
Re: misunderstanding executing data as code
On Sun, Dec 11, 2016 at 7:31 AM, Joh-Tob Schäg wrote: > One does not simply say that the pil interpreter is misunderstanding. Indeed, but I think that here Dean was talking about his own misunderstanding. > Secondly does 'pack fix your problem? (pack Fn) would indeed be simpler than (glue "" Fn). Maybe you need «any» ? (setq Fn '("e" "v" "a" "l")) -> ("e" "v" "a" "l") : ((any (pack Fn)) (+ 2 2)) -> 4 chri -- UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
Re: misunderstanding executing data as code
First things first. One does not simply say that the pil interpreter is missunderstanding. Secondly does 'pack fix your problem? Do you know the difference between a list of chars and a "string-like Symbol"? 2016-12-10 23:01 GMT+01:00 dean : > The following program shows me trying to extract a function name from a > "string" and execute the function using the string. > The function is called some_fn. > If I type (some_fn) directly...all is well. > When I first executed (Fn) that I THOUGHT held the function name...it > didn't so I dropped into the REPL and played until I got (some_fn) returned > i.e. by (str (glue "" Fn)) i.e. -> (some_fn) > I thought putting this in my program would call some_fn but it doesn't and > I don't understand why. > Thank you in anticipation > Dean > > (setq Lmnu > '(mAin_mnu-some_fn)) > > (de some_fn () >(prinl "yes in some_fn")) > > (de lmnu_to_mnu_tbl (Lmnu Lkey) >(for Ele Lmnu > ( > ifn (car Ele) > (prog >(setq Optn_fn_pair (split (chop Ele) '-)) >(setq Optn (get Optn_fn_pair 1)) >(setq Fn (get Optn_fn_pair 2)) > >(some_fn) #this worked fine > > #! > #: (Fn) #this didn't 'cos Fn contained "s" "o" "m". > #-> "n" > #: (glue "" Fn) > #-> "some_fn" > #: (str (glue "" Fn)) #this looked to evaluate to (some_fn) which worked > above > #-> (some_fn) > >#(str (glue "" Fn)) #but executing it didn't call some_fn >#((str (glue "" Fn))) #nor did evaluating what got returned > ) > (prog ># (printsp Ele 'is 'a 'list) ># (prinl) > ) > ) >) > ) > > (debug 'lmnu_to_mnu_tbl) > (lmnu_to_mnu_tbl Lmnu ()) >