public
Description: supposed to be an interesting lisp-like language that (1) feels like javascript (2) can auto-parallelize serial procedures. It may never get completed.
Homepage:
Clone URL: git://github.com/jaekwon/Paralang.git
Paralang / test2.py
100644 131 lines (104 sloc) 1.892 kb
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from para import TokenStream, parse_string, interpret
 
def assert_computes_to(code, output):
parsed = parse_string(code)
try:
computed = interpret(parsed)
expected = parse_string(output)
if str(computed) != str(expected):
print "FAIL"
print "code: " + str(code)
print "parsed: " + str(parsed)
print "computed: " + str(computed)
print "expected: " + str(expected)
import pdb; pdb.set_trace()
except Exception, e:
print "FAILED TO INTERPRET"
print "parsed: " + str(parsed)
raise
 
code = """
[
 
!debugger
foo = {(a b c=4)
a = b+c
return: a
}
 
return: foo(a:1 b:2 c:3)
 
]
 
"""
assert_computes_to(code, "5")
 
 
code = """
{
foo = [a:1 b:2]
foo.a = 3
}
""" # this.foo does not work because it's jank. what do we do?
assert_computes_to(code, "[__name__:__main__ foo:[a:1 b:2 a:3]]")
 
 
code = """
{
foo = [1 2]
bar = self.foo
}
"""
assert_computes_to(code, "[__name__:__main__ foo:[1 2 ] bar:[1 2 ] ]")
 
 
code = """
{
foo = [1 2]
bar = [foo]
}
 
"""
assert_computes_to(code, "[__name__:__main__ foo:[1 2] bar:[[1 2]]]")
 
 
code = """
{
sys = [
stdout = 'stdout
]
foo = [1 2 3]
bar = [x:foo y:foo z:foo]
baz = bar.x
}
 
"""
assert_computes_to(code, "[__name__:__main__ sys:[stdout:stdout ] foo:[1 2 3 ] bar:[x:[1 2 3 ] y:[1 2 3 ] z:[1 2 3 ] ] baz:[1 2 3 ] ]")
 
 
code = """
{
foo = [1 2 3]
bar = [x:foo y:foo z:foo]
baz = bar.x
return: baz
}
 
"""
assert_computes_to(code, "[1 2 3]")
 
 
code = """
{
foo = [a: [z:1 x:2 y:3] b: [z:2 x:3 y:1]]
bar = [aaa:foo.a bbb:foo.b]
baz = [bar.aaa.z bar.bbb.y]
return: baz
}
"""
assert_computes_to(code, "[1 1]")
 
 
code = """
{
foo = bar
bar = 1
return: foo
}
"""
assert_computes_to(code, "1")
 
code = """
{
foo = [bar baz]
bar = 1
baz = 2
return: foo
}
"""
assert_computes_to(code, "[1 2]")
 
 
code = """
{
foo = bar
bar = baz
baz = 'booya
return: foo
}
"""
assert_computes_to(code, "booya")