A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://mail.python.org/pipermail/python-dev/2003-February/032731.html below:

[Python-Dev] Re: Extended Function syntax

[Python-Dev] Re: Extended Function syntaxGuido van Rossum guido@python.org
Sun, 02 Feb 2003 08:27:21 -0500
[Guido]
> >   switch(expr):
> >     case(val1):
> >       block1
> >     case(val2):
> >       block2
> >     default:
> >       block3
> >
> > This actually makes me worry -- I didn't plan thunks to be the answer
> > to all problems.  A new idea that could cause a paradigm landslide is
> > not necessarily right.

[Samuele]
> I don't exactly get how containment relationships are disambiguated at
> compilation time?
> 
> for sure this is bordering macros' expressivity

I'm not sure I approve of this, but I believe that Glyph's suggestion
can be done by inserting a reference to the most recently active
switch object in the thunk's namespace.  Rough sketch of code:

  class switch:
    def __init__(self, expr):
      self.expr = expr
    def __call__(self, thunk):
      self.success = False
      self.save_switch = thunk.locals.get('__switch__')
      try:
        thunk.locals['__switch__'] = self
        thunk()
      finally:
        thunk.locals['__switch__'] = self.save_switch

  class case:
    def __init__(self, val):
      self.val = val
    def __call__(self, thunk):
      sw = thunk.locals.get('__switch__')
      assert sw is not None
      if sw.success: # A previous case triggered
        return
      if self.val == sw.expr:
        sw.success = True
        thunk()

I'll leave the implementation of default to the reader's imagination.

Again, not endorsing, just playing with Glyph's idea.  Clearly one
could write ugly stuff like

  switch(x):
    print "This is always executed"
    for i in range(10):
      case(i):
        print "x is equal to", i
        case(i+1):
          print "this is unreachable"

--Guido van Rossum (home page: http://www.python.org/~guido/)



RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4