Changeset 1689 for lang/unlambda

Show
Ignore:
Timestamp:
11/17/07 02:03:23 (6 years ago)
Author:
nishio
Message:

lang/unlambda/impl/in_python: support [d], the delay special form; add docstrings

Files:
1 modified

Legend:

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

    r1688 r1689  
    2222     
    2323class Apply(Node): 
     24    "apply: `FG = F(G)" 
    2425    def __init__(self, f, g): 
    2526        self.f = f 
    2627        self.g = g 
    2728    def eval(self): 
    28         return self.f.eval()(self.g.eval()) 
     29        f, g = self.f, self.g 
     30        if f == "(delay)": # special form 
     31            def Promise0(Y): 
     32                g.eval() 
     33                def Promise1(X): 
     34                    return X(Y) 
     35                return Promise1 
     36            return Promise0 
     37        return f.eval()(g.eval()) 
    2938 
    3039class Dot(Node): 
     40    "print char: `.aX => print 'a'" 
    3141    def __init__(self, c): 
    3242        self.c = c 
     
    3545            import sys 
    3646            sys.stdout.write(self.c) 
     47            return X 
    3748        return Dot0 
    3849 
    3950class R(Node): 
     51    "carriage return: `rX => newline" 
    4052    def eval(self): 
    4153        def R0(X): 
    4254            print 
     55            return X 
    4356        return R0 
    4457 
    4558class K(Node): 
     59    "constant: ``kXY = X" 
    4660    def eval(self): 
    4761        def K0(X): 
     
    5266 
    5367class S(Node): 
     68    "substitution: ```sXYZ = ``XZ`YZ" 
    5469    def eval(self): 
    5570        def S0(X): 
     
    6277 
    6378class I(Node): 
     79    "identity" 
    6480    def eval(self): 
    6581        def I0(X): 
     
    6884 
    6985class V(Node): 
    70     """blackhole: v(x) == v 
     86    """void: v(x) == v 
    7187    equivalent to ` ``s``s`kskk ``s``s`kskk""" 
    7288    def eval(self): 
     
    85101        "r": lambda: R(), 
    86102        "v": lambda: V(), 
     103        "d": lambda: "(delay)", # special form 
    87104    }.get(c, lambda: _parse(iter))() 
    88105    return result