Show
Ignore:
Timestamp:
11/23/07 14:11:19 (14 months ago)
Author:
nishio
Message:

lang/unlambda/impl/in_python: to be crazy

Files:
1 copied

Legend:

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

    r1767 r1928  
    2525 
    2626# Node 
    27 I = lambda:lambda c:c(lambda X,c:c(X)) 
     27 
    2828Dot = lambda char:lambda c:c( 
    2929    lambda X,c:sys.stdout.write(char)or c(X)) 
     
    3434                c(lambda Y,c:nY(lambda X:c(lambda X,c:X(Y,c)))) 
    3535            )or( 
    36                 nY(lambda Y: lambda :X(Y, c)))) 
    37 D = lambda:D_ 
     36                nY(lambda Y:lambda:X(Y, c)))) 
     37 
    3838D_ = lambda c:c(D_) 
    39 V0 = lambda X,c:c(V0) 
    40 V = lambda:lambda c:c(V0) 
    41 K = lambda:lambda c:c(lambda X,c:c(lambda Y,c:c(X))) 
    42 C = lambda:lambda c:c(lambda Y,c:lambda:Y(lambda F,c_:c(F),c)) 
    43 S = lambda:lambda c:c( 
     39lambda V=lambda X,c:c(V):V 
     40 
     41def _parse(iter): 
     42    return { 
     43        "i": lambda:lambda c:c(lambda X,c:c(X)), 
     44        "d": lambda:D_, 
     45        "c": lambda:lambda c:c(lambda Y,c:lambda:Y(lambda F,c_:c(F),c)), 
     46        "v": lambda:lambda c:c(V), 
     47        "s": lambda:lambda c:c( 
    4448        lambda X,c:c( 
    4549            lambda Y,c:c( 
     
    5155                        Apply( 
    5256                            lambda c:c(Y), 
    53                             lambda c:c(Z))))(c)))) 
    54  
    55 def _parse(iter): 
    56     return { 
    57         "i": lambda: I(), 
    58         "d": lambda: D(), 
    59         "c": lambda: C(), 
    60         "v": lambda: V(), 
    61         "s": lambda: S(), 
    62         "k": lambda: K(), 
     57                            lambda c:c(Z))))(c)))), 
     58        "k": lambda:lambda c:c(lambda X,c:c(lambda Y,c:c(X))), 
    6359        "r": lambda: Dot("\n"), 
    6460        ".": lambda: Dot(iter.next()), 
     
    6662    }.get(iter.next(), lambda: _parse(iter))() 
    6763 
    68 def parse(s): 
    69     return _parse(list(s).__iter__()) 
     64parse = lambda s: _parse(list(s).__iter__()) 
    7065 
    7166# Main loop 
     67 
     68unlambda = lambda:None 
     69unlambda.next = lambda :unlambda.__setattr__( 
     70    "task", 
     71    unlambda.task()) or unlambda.task 
     72 
     73from itertools import count, ifilter 
    7274def run(s): 
    73     task = lambda:parse(s)(lambda f:lambda:None) 
    74     while task: 
    75         task = task() 
     75    unlambda.__setattr__("task", lambda:parse(s)(lambda f:lambda:None)) 
     76    ifilter(lambda x:not(unlambda.next()), count()).next() 
    7677 
    7778# Test 
     
    9091      """) 
    9192 
     93_test() 
     94print "ok."