/
demo.py
113 lines (81 loc) · 2.03 KB
/
demo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
from sqlalchemy import *
from macropy.macros2.linq import macros, sql, query, generate_schema
engine = create_engine("sqlite://")
for line in open("macros2/linq_test_dataset.sql").read().split(";"):
engine.execute(line.strip())
db = generate_schema(engine)
query_string = sql%((x.name, x.area) for x in db.bbc if x.area > 10000000)
print type(query_string)
print query_string
"""
Demos
=====
tracing
-------
from macropy.macros2.tracing import macros
from macropy.macros2.t racing import *
with trace:
x = (1 + 2)
y = x * x + 7
quicklambda
-------
from macropy.macros.quicklambda import macros, f
print map(f%_[0], ['omg', 'wtf', 'bbq'])
print reduce(f%(_ + _), [1, 2, 3])
adts
-------
from macropy.macros.adt import macros
from macropy.macros.adt import *
@case
class Point(x, y): pass
p = Point(1, 2)
print str(p)
print p.x
print p.y
print Point(1, 2) == Point(1, 2)
pattern matching
----------------
LINQ
----
from sqlalchemy import *
from macropy.macros2.linq import macros, sql, generate_schema
engine = create_engine("sqlite://")
for line in open("macros2/linq_test_dataset.sql").read().split(";"):
engine.execute(line.strip())
db = generate_schema(engine)
results = engine.execute(
sql%((x.name, x.area) for x in db.bbc if x.area > 10000000)
).fetchall()
results = engine.execute(
sql%(
x.name for x in db.bbc
if x.gdp / x.population > (
y.gdp / y.population for y in db.bbc
if y.name == 'United Kingdom'
)
if (x.region == 'Europe')
)
).fetchall()
for line in results: print line
from macropy.macros.adt import macros
from macropy.macros.adt import *
from macropy.macros.pattern import macros
from macropy.macros.pattern import *
@case
class Add(left, right):
pass
@case
class Mul(left, right):
pass
@case
class Num(x):
pass
def compute(expr):
with switch(expr):
if Num(n):
return n
elif Add(x, y):
return compute(x) + compute(y)
elif Mul(x, y):
return compute(x) * compute(y)
"""