Re: misunderstanding executing data as code

2016-12-11 Thread dean
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

2016-12-11 Thread Joh-Tob Schäg
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

2016-12-10 Thread 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

2016-12-10 Thread Christophe Gragnic
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

2016-12-10 Thread Joh-Tob Schäg
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 ())
>