Changeset 1688 for lang/unlambda

Show
Ignore:
Timestamp:
11/17/07 01:29:33 (6 years ago)
Author:
nishio
Message:

lang/unlambda/impl/in_python: support [rv], to ignore meaningless characters

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/unlambda/impl/in_python/unlambda.py

    r1683 r1688  
    33 
    44# doctest 
    5 >>> p = parse("``skk").eval() 
     5>>> p = parse("``skk").eval() # SKK = I 
    66>>> p(1) 
    771 
    88 
    9 >>> p = parse("`.a.a").eval() 
     9>>> p = parse("`.a.b").eval() 
    1010a 
     11 
     12>>> run("`.a`rr") # carriage return 
     13<BLANKLINE> 
     14a 
     15 
     16>>> run("`vv").func_name # blackhole 
     17'V0' 
    1118""" 
    1219 
     
    2936            sys.stdout.write(self.c) 
    3037        return Dot0 
     38 
     39class R(Node): 
     40    def eval(self): 
     41        def R0(X): 
     42            print 
     43        return R0 
    3144 
    3245class K(Node): 
     
    5467        return I0 
    5568 
     69class V(Node): 
     70    """blackhole: v(x) == v 
     71    equivalent to ` ``s``s`kskk ``s``s`kskk""" 
     72    def eval(self): 
     73        def V0(X): 
     74            return V0 
     75        return V0 
     76         
    5677def _parse(iter): 
    5778    c = iter.next() 
     
    6182        "s": lambda: S(), 
    6283        "k": lambda: K(), 
    63         ".": lambda: Dot(iter.next()) 
    64     }[c]() 
     84        ".": lambda: Dot(iter.next()), 
     85        "r": lambda: R(), 
     86        "v": lambda: V(), 
     87    }.get(c, lambda: _parse(iter))() 
    6588    return result 
    6689 
     
    6891    return _parse(list(s).__iter__()) 
    6992 
     93def run(s): 
     94    return parse(s).eval() 
     95 
    7096def _test(): 
    7197    import doctest