From 2ae76e402eac4b451ce58ce41352def8ff2dffb9 Mon Sep 17 00:00:00 2001 From: lemon Date: Mon, 16 Jun 2025 11:51:46 +0200 Subject: change lambda syntax {[a] x} -> $[a]{x} --- bench.pez | 2 +- pez.c | 8 +++++--- test.pez | 26 ++++++++++++-------------- ycomb.pez | 4 ++-- 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]] -- cgit v1.2.3