summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2025-06-16 11:51:46 +0200
committerlemon <lsof@mailbox.org>2025-06-16 11:51:46 +0200
commit2ae76e402eac4b451ce58ce41352def8ff2dffb9 (patch)
tree279eb649120701ab11b8c027709f0240038f78ae
parent3967fccab7a41f8218b7ba589eee470d7ab4972a (diff)
change lambda syntax {[a] x} -> $[a]{x}
-rw-r--r--bench.pez2
-rw-r--r--pez.c8
-rw-r--r--test.pez26
-rw-r--r--ycomb.pez4
4 files changed, 20 insertions, 20 deletions
diff --git a/bench.pez b/bench.pez
index e5bb20e..e48d69a 100644
--- a/bench.pez
+++ b/bench.pez
@@ -1,4 +1,4 @@
-@fib: {[n]
+@fib: $[n] {
n < 2 ? n : fib[n - 2] + fib[n - 1]
}
diff --git a/pez.c b/pez.c
index e12ad46..52744ad 100644
--- a/pez.c
+++ b/pez.c
@@ -3039,6 +3039,8 @@ lambdaexpr(Comp *cm, const char *name)
}
}
+ ETRY(expectspchr(cm, '{'));
+
ETRY(block(cm, '}'));
ETRY(compop(cm, Oret));
ETRY(fincompfn(cm));
@@ -3268,7 +3270,7 @@ primaryexpr(Comp *cm)
}
return 1;
- case '{':
+ case '$':
return lambdaexpr(cm, NULL);
case '#':
@@ -4036,7 +4038,7 @@ decl(Comp *cm, struct local **pl, bool nofold)
return comperr(cm, c, "expected ':' or '='"), 0;
}
- if (matchspchr(cm, '{')) {
+ if (matchspchr(cm, '$')) {
// named fn, possibly recursive
TRY(l = addlocal(cm, &idx, name, mutable, cm->has_k && !mutable, cm->k));
TRY(lambdaexpr(cm, name));
@@ -4215,7 +4217,7 @@ stmt(Comp *cm)
TRY(expectspchr(cm, '='));
TRY(box_str(cm->cx, &key, name, strlen(name)));
TRY(compconst(cm, key));
- if (matchspchr(cm, '{')) {
+ if (matchspchr(cm, '$')) {
TRY(lambdaexpr(cm, name)); // named fn
} else {
TRY(expr(cm)); // initializer
diff --git a/test.pez b/test.pez
index 61034f7..e3bf14e 100644
--- a/test.pez
+++ b/test.pez
@@ -1,19 +1,19 @@
-@Box: {[value]
+@Box: $[value] {
dilambda[
- { value },
- {[new] value = new }
+ ${ value },
+ $[new] { value = new }
]
}
-@Array2d: {[w, h]
+@Array2d: $[w, h] {
@data: array#new[w * h, 0]
dilambda[
- {[x, y] data[x + (y * w)] },
- {[x, y, new] data[x + (y * w)] = new }
+ $[x, y] { data[x + (y * w)] },
+ $[x, y, new] { data[x + (y * w)] = new }
]
}
-@print: {[x] printf["x -> %a\n", x] }
+@print: $[x] { printf["x -> %a\n", x] }
@x = Box[-7]
x[] *= 2
print[x[]]
@@ -27,7 +27,7 @@ FOR [@x: 0][< 10][+ 1]
printf["%a == %a\n", m[3,7], 3^7]
-@add: {[*]
+@add: $[*] {
@acc = 0
FOR [@i: 0][< SEL$][+ 1]
acc += SEL[i]
@@ -36,13 +36,11 @@ printf["%a == %a\n", m[3,7], 3^7]
printf["4+1+3: %a\n", add[4,1,3]]
-@gather: {[*]
- SEL[*]
-}
+@gather: $[*] { SEL[*] }
printf["test %a\n", gather[-1, (), 'x]]
-@map: {[f, xs]
+@map: $[f, xs] {
@ys: array#new[xs.len]
FOR [@i: 0][< xs.len][+ 1]
ys[i] = f[xs[i]]
@@ -51,7 +49,7 @@ printf["test %a\n", gather[-1, (), 'x]]
printf["maps %a\n", map["abcd", #[1,2,0]]]
-@inspect: {[m]
+@inspect: $[m] {
printf["%a\n", m]
}
@@ -60,6 +58,6 @@ r[0]=r
printf["r: "] inspect[r]
printf["r.a -> %a\n", r[0].a]
-{
+${
inspect [#{0 3,"a" 3}]
}[]
diff --git a/ycomb.pez b/ycomb.pez
index dff0f40..26fb037 100644
--- a/ycomb.pez
+++ b/ycomb.pez
@@ -1,5 +1,5 @@
-@Y: {[f] {[i] i[i]}[{[i] f[{[x] i[i][x]}]}]}
+@Y: $[f]{$[i]{i[i]}[$[i]{f[$[x]{i[i][x]}]}]}
-@fact: {[n] Y[{[f] {[n] n == 0 ? 1 : n * f[n - 1]}}][n]}
+@fact: $[n] {Y[$[f]{$[n] {n == 0 ? 1 : n * f[n - 1]}}][n]}
printf["%a\n", fact[5]]