Skip to content

Commit 1b61879

Browse files
committed
Вложенные лямбды
1 parent 1872434 commit 1b61879

14 files changed

+739
-74
lines changed

TestSuite/nested_lambdas_1.pas

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
procedure p(f: Func<string, IEnumerable<string>>);
2+
begin
3+
4+
end;
5+
6+
procedure p(f: Func<integer, IEnumerable<integer>>);
7+
begin
8+
var res := f(3).ToList();
9+
assert(res.Count = 4);
10+
assert(res[0] = 0);
11+
assert(res[1] = 1);
12+
assert(res[2] = 4);
13+
assert(res[3] = 9);
14+
end;
15+
16+
begin
17+
p(x -> Range(0, x).Select(y -> y * y));
18+
end.

TestSuite/nested_lambdas_2.pas

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
procedure p(f: Func<integer, IEnumerable<integer>>);
2+
begin
3+
var res := f(5).ToList();
4+
assert(res.Count = 5);
5+
assert(res[0] = 2);
6+
assert(res[1] = 3);
7+
assert(res[2] = 4);
8+
assert(res[3] = 5);
9+
assert(res[4] = 6);
10+
end;
11+
12+
begin
13+
p(x -> Seq(1,2,3,4,5).Select(y -> Range(0, y).Select(z -> z).Count()));
14+
end.

TestSuite/nested_lambdas_3.pas

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
type cl = class
2+
public
3+
procedure p(f: Func<string, IEnumerable<string>>);
4+
begin
5+
6+
end;
7+
8+
procedure p(f: Func<integer, IEnumerable<integer>>);
9+
begin
10+
var res := f(3).ToList();
11+
assert(res.Count = 4);
12+
assert(res[0] = 0);
13+
assert(res[1] = 1);
14+
assert(res[2] = 4);
15+
assert(res[3] = 9);
16+
end;
17+
18+
procedure tt();
19+
begin
20+
p(x -> Range(0, x).Select(y -> y * y));
21+
end;
22+
end;
23+
24+
begin
25+
(new cl()).p(x -> Range(0, x).Select(y -> y * y));
26+
(new cl()).tt();
27+
end.

TestSuite/nested_lambdas_4.pas

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
type cl = class
2+
public
3+
constructor(f: Func<string, IEnumerable<string>>);
4+
begin
5+
6+
end;
7+
8+
constructor (f: Func<integer, IEnumerable<integer>>);
9+
begin
10+
var res := f(3).ToList();
11+
assert(res.Count = 4);
12+
assert(res[0] = 0);
13+
assert(res[1] = 1);
14+
assert(res[2] = 4);
15+
assert(res[3] = 9);
16+
end;
17+
18+
end;
19+
20+
begin
21+
new cl(x -> Range(0, x).Select(y -> y * y));
22+
end.

TestSuite/nested_lambdas_5.pas

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
begin
2+
var a := 3;
3+
var ttt := Seq(1,2).Select(x -> begin
4+
var t := 5;
5+
result := Range(1,a+x).Select(y -> begin
6+
var g := 5;
7+
t += 5;
8+
result := Range(1,2).Where(f -> f + a > 0).Select(z -> z + g + t);
9+
end)
10+
end).ToList();
11+
assert(ttt[0].ToList()[0].ToList()[0] = 31);
12+
end.

TestSuite/nested_lambdas_6.pas

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
type cl = class
2+
private gg := 9;
3+
public
4+
procedure h(k: integer);
5+
begin
6+
var a := 5;
7+
Seq(1,2,3).Select(x -> begin
8+
var t := 5;
9+
result := Range(1,a).Select(y -> begin
10+
var g := 5;
11+
writeln(a);
12+
result := Range(1,3).Where(f -> f + a > 0).Select(z -> z + g + t);
13+
end)
14+
end);
15+
end;
16+
end;
17+
18+
begin
19+
(new cl).h(6);
20+
end.

TestSuite/nested_lambdas_7.pas

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
type cl = class
2+
protected gg:integer := 9;
3+
public
4+
function h(k: integer):string;
5+
begin
6+
var a := 5;
7+
foreach var tt in Seq(1,2,3) do
8+
begin
9+
var d := Seq(1,2,3).Select(x -> begin
10+
var e := 65;
11+
result := e + x + tt + self.gg + Range(1,2).Select(y -> gg + self.gg+y+a + tt).First()
12+
end).ToList();
13+
assert(d[0] = 100 + (tt * 2 - 1));
14+
end;
15+
end;
16+
end;
17+
18+
begin
19+
(new cl).h(5);
20+
end.

TestSuite/nested_lambdas_8.pas

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
begin
2+
var yy := 5;
3+
Range(1,1).Select(x -> begin
4+
var l := x + yy; //6
5+
begin
6+
writeln(l);
7+
begin
8+
writeln(l);
9+
end;
10+
end;
11+
writeln(yy);
12+
result := Range(1, x).Select(y -> y + l + yy + Seq(1,2).Select(z -> l + yy).First())
13+
end);
14+
writeln(yy);
15+
end.

TestSuite/nested_lambdas_9.pas

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
procedure p<T>(aa: T); where T: class;
2+
begin
3+
var a := Seq(1,2,3).Select(x -> begin
4+
var tt := new List<T>();
5+
writeln(aa);
6+
tt.Add(aa);
7+
result := tt.Select(y -> begin result := aa; writeln(aa) end).ToList()
8+
end).ToList();
9+
end;
10+
11+
begin
12+
p('sss');
13+
end.

0 commit comments

Comments
 (0)