Re: GOTO in PicoLisp

2012-09-07 Thread José Romero
On Fri, 7 Sep 2012 07:51:03 +0200
Alexander Burger  wrote:

> Hi José,
> 
> > Because the world wasn't weird enough already I took the liberty to
> 
> Bravo! That's a valid idea ;)
> 
> 
> Let me suggest two small changes:
> 
> > (de prog+ "Prg"
> >(use ("Thunk" "Ret" "L")
> >   (setq "Thunk" "Prg" "Ret" NIL)
> >   (while
> 
> Did you have any special reason for 'use'? Otherwise I would use
> 'let':
> 
> (de prog+ "Prg"
>(let ("Thunk" "Prg"  "Ret" NIL  "L" NIL)
>   (while
> 
> 
> The call to 'seek'
> 
> >(seek '[(X) (= (car X) "L")] "Prg")
> 
> can in this case be replaced by member:
> 
>(member "L" "Prg")
> 
> Cheers,
> - Alex

I "picolisped" a bit the functions and came up with this:

(de prog+ "Prg"
   (let ("Thunk" "Prg" "Ret" NIL "L" NIL)
  (while (setq "Thunk" (catch 'goto (setq "Ret" (run "Thunk")
  "Ret" ) )

(de goto (L)
   # "Prg" from 'prog+
   (throw 'goto (member L "Prg")) )

()

Now goto throws the thunk itself, passing it as a continuation. You can
manually throw any code (even code generated on the fly).

I wonder if there is an use case where this could be actually faster
than other alternatives.

Cheers,
José
--
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: GOTO in PicoLisp

2012-09-06 Thread Alexander Burger
Hi José,

> Because the world wasn't weird enough already I took the liberty to

Bravo! That's a valid idea ;)


Let me suggest two small changes:

> (de prog+ "Prg"
>(use ("Thunk" "Ret" "L")
>   (setq "Thunk" "Prg" "Ret" NIL)
>   (while

Did you have any special reason for 'use'? Otherwise I would use 'let':

(de prog+ "Prg"
   (let ("Thunk" "Prg"  "Ret" NIL  "L" NIL)
  (while


The call to 'seek'

>(seek '[(X) (= (car X) "L")] "Prg")

can in this case be replaced by member:

   (member "L" "Prg")

Cheers,
- Alex
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe