1
2[
3  Local(a,b,c,d);
4  DefMacroRuleBase(foo,{a,b});
5
6  // Simple check
7  foo(_c,_d) <-- {@c,@d};
8  Verify(foo(2,3),Hold({2,3}));
9
10  Macro("foo",{a}) {@a,a};
11  a:=A;
12  Verify(foo(B),{B,A});
13  Retract(foo,1);
14  Retract(foo,2);
15  Verify(foo(2,3),foo(2,3));
16  Verify(foo(B),foo(B));
17];
18
19[
20  Local(a,i,tot);
21  a:=100;
22  Retract(forloop,4);
23  Macro(forloop,{init,pred,inc,body})
24  [
25    @init;
26    While(@pred)
27    [
28      @body;
29      @inc;
30    ];
31    True;
32  ];
33  tot:=0;
34  forloop(i:=1,i<=10,i++,tot:=tot+a*i);
35  Verify(i,11);
36  Verify(tot,5500);
37];
38
39[
40  Macro("bar",{list,...}) Length(@list);
41  Verify(bar(a,b,list,bar,list),5);
42];
43
44[
45  Local(x,y,z);
46  y:=x;
47  Verify(`{@x,@y},{x,x});
48  z:=u;
49  y:={@z,@z};
50  Verify(`{@x,@y},{x,{@z,@z}});
51  Verify(`{@x,`(@y)},{x,{@u,@u}});
52  y:=Hold(`{@z,@z});
53
54  Verify(`{@x,@y},{x,{u,u}});
55  Verify(`{@x,`(@y)},{x,{u,u}});
56];
57
58// check that a macro can reach a local from the calling environment.
59[
60  Macro(foo,{x}) a*(@x);
61  Function(bar,{x})
62  [
63    Local(a);
64    a:=2;
65    foo(x);
66  ];
67  Verify(bar(3),6);
68];
69
70//check that with nested backquotes expansion only expands the top-level expression
71[
72  Local(a,b);
73  a:=2;
74  b:=3;
75  Verify(
76  `[
77     Local(c);
78     c:=@a+@b;
79     `((@c)*(@c));
80  ],25);
81];
82
83
84