Hex Artifact Content
Not logged in

Artifact b31646ec7576a8a64315253973b7157843742e22:


0000: 40 6d 61 63 72 6f 20 74 77 69 63 65 20 3d 20 66  @macro twice = f
0010: 75 6e 28 78 29 20 7b 20 78 3b 20 78 20 7d 3b 0a  un(x) { x; x };.
0020: 40 6d 61 63 72 6f 20 6d 61 78 28 78 2c 79 29 20  @macro max(x,y) 
0030: 7b 0a 20 20 76 61 72 20 5f 78 20 3d 20 78 3b 20  {.  var _x = x; 
0040: 23 20 6e 6f 20 68 79 67 65 6e 69 63 20 6d 61 63  # no hygenic mac
0050: 72 6f 20 62 74 77 2e 2e 2e 2e 0a 20 20 76 61 72  ro btw.....  var
0060: 20 5f 79 20 3d 20 79 3b 20 23 20 6e 6f 20 68 79   _y = y; # no hy
0070: 67 65 6e 69 63 20 6d 61 63 72 6f 20 62 74 77 2e  genic macro btw.
0080: 2e 2e 2e 0a 20 20 69 66 28 5f 78 3c 5f 79 29 74  ....  if(_x<_y)t
0090: 68 65 6e 20 5f 79 20 65 6c 73 65 20 5f 78 0a 7d  hen _y else _x.}
00a0: 3b 0a 64 65 66 20 6d 61 78 4e 6f 72 6d 61 6c 28  ;.def maxNormal(
00b0: 78 2c 79 29 20 7b 0a 20 20 69 66 28 78 3c 79 29  x,y) {.  if(x<y)
00c0: 0a 09 74 68 65 6e 3a 20 79 0a 09 65 6c 73 65 3a  ..then: y..else:
00d0: 20 78 0a 7d 3b 0a 40 6d 61 63 72 6f 20 6d 61 78   x.};.@macro max
00e0: 42 61 64 28 78 2c 79 29 20 7b 0a 20 20 69 66 20  Bad(x,y) {.  if 
00f0: 78 3c 79 3a 20 79 20 65 6c 73 65 3a 20 78 0a 7d  x<y: y else: x.}
0100: 3b 0a 0a 40 6d 61 63 72 6f 20 4c 65 74 49 74 42  ;..@macro LetItB
0110: 65 28 78 2c 20 79 29 20 7b 20 6c 65 74 20 69 74  e(x, y) { let it
0120: 20 3d 20 78 20 69 6e 20 79 20 7d 3b 0a 0a 40 6d   = x in y };..@m
0130: 61 63 72 6f 20 70 6f 77 31 30 28 78 29 20 7b 0a  acro pow10(x) {.
0140: 20 20 40 76 61 6c 75 65 28 0a 20 20 20 20 64 65    @value(.    de
0150: 66 20 70 6f 77 28 79 2c 20 6e 29 20 7b 0a 20 20  f pow(y, n) {.  
0160: 20 20 20 20 69 66 28 20 6e 20 3d 3d 20 31 20 29      if( n == 1 )
0170: 20 74 68 65 6e 20 79 0a 20 20 20 20 20 20 65 6c   then y.      el
0180: 73 65 0a 20 20 20 20 20 20 20 20 40 6d 61 63 72  se.        @macr
0190: 6f 28 20 40 76 61 6c 75 65 28 79 29 20 2a 20 40  o( @value(y) * @
01a0: 76 61 6c 75 65 28 70 6f 77 28 79 2c 6e 2d 31 29  value(pow(y,n-1)
01b0: 29 20 29 0a 20 20 20 20 7d 0a 20 20 20 20 69 6e  ) ).    }.    in
01c0: 0a 20 20 20 20 20 20 70 6f 77 28 40 6d 61 63 72  .      pow(@macr
01d0: 6f 28 78 2b 31 29 2c 31 30 29 0a 20 20 29 0a 7d  o(x+1),10).  ).}
01e0: 3b 0a 0a 40 6d 61 63 72 6f 20 70 6f 77 31 30 48  ;..@macro pow10H
01f0: 61 72 64 28 78 29 20 7b 0a 20 20 40 76 61 6c 75  ard(x) {.  @valu
0200: 65 28 0a 20 20 20 20 64 65 66 20 70 6f 77 28 78  e(.    def pow(x
0210: 2c 20 6e 29 20 7b 0a 20 20 20 20 20 20 69 66 28  , n) {.      if(
0220: 20 6e 20 3d 3d 20 31 20 29 20 74 68 65 6e 20 78   n == 1 ) then x
0230: 20 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20   .      else.   
0240: 20 20 20 20 20 40 6d 61 63 72 6f 28 20 40 76 61       @macro( @va
0250: 6c 75 65 28 78 29 20 2a 20 40 76 61 6c 75 65 28  lue(x) * @value(
0260: 70 6f 77 28 78 2c 6e 2d 31 29 29 20 29 0a 20 20  pow(x,n-1)) ).  
0270: 20 20 7d 0a 20 20 20 20 69 6e 0a 20 20 20 20 20    }.    in.     
0280: 20 70 6f 77 28 40 6d 61 63 72 6f 28 78 2b 31 29   pow(@macro(x+1)
0290: 2c 31 30 29 0a 20 20 29 0a 7d 3b 0a 0a 64 65 66  ,10).  ).};..def
02a0: 20 70 72 69 6e 74 41 6e 64 52 65 74 75 72 6e 28   printAndReturn(
02b0: 78 29 0a 7b 0a 09 70 72 69 6e 74 28 78 29 3b 0a  x).{..print(x);.
02c0: 09 78 0a 7d 3b 0a 0a 64 65 66 20 6d 61 69 6e 28  .x.};..def main(
02d0: 29 0a 7b 0a 09 74 77 69 63 65 28 20 70 72 69 6e  ).{..twice( prin
02e0: 74 28 22 66 6f 6f 22 29 20 29 3b 0a 09 70 72 69  t("foo") );..pri
02f0: 6e 74 28 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  nt("------------
0300: 2d 2d 22 29 3b 0a 09 70 72 69 6e 74 28 6d 61 78  --");..print(max
0310: 28 70 72 69 6e 74 41 6e 64 52 65 74 75 72 6e 28  (printAndReturn(
0320: 31 30 30 29 2c 70 72 69 6e 74 41 6e 64 52 65 74  100),printAndRet
0330: 75 72 6e 28 32 30 30 29 29 29 3b 0a 09 70 72 69  urn(200)));..pri
0340: 6e 74 28 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  nt("------------
0350: 2d 2d 22 29 3b 0a 09 70 72 69 6e 74 28 6d 61 78  --");..print(max
0360: 4e 6f 72 6d 61 6c 28 70 72 69 6e 74 41 6e 64 52  Normal(printAndR
0370: 65 74 75 72 6e 28 31 30 30 29 2c 70 72 69 6e 74  eturn(100),print
0380: 41 6e 64 52 65 74 75 72 6e 28 32 30 30 29 29 29  AndReturn(200)))
0390: 3b 0a 09 70 72 69 6e 74 28 22 2d 2d 2d 2d 2d 2d  ;..print("------
03a0: 2d 2d 2d 2d 2d 2d 2d 2d 22 29 3b 0a 09 70 72 69  --------");..pri
03b0: 6e 74 28 6d 61 78 42 61 64 28 70 72 69 6e 74 41  nt(maxBad(printA
03c0: 6e 64 52 65 74 75 72 6e 28 31 30 30 29 2c 70 72  ndReturn(100),pr
03d0: 69 6e 74 41 6e 64 52 65 74 75 72 6e 28 32 30 30  intAndReturn(200
03e0: 29 29 29 3b 0a 09 70 72 69 6e 74 28 22 2d 2d 2d  )));..print("---
03f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 29 3b 0a 09  -----------");..
0400: 70 72 69 6e 74 28 20 4c 65 74 49 74 42 65 28 20  print( LetItBe( 
0410: 31 2b 32 2b 33 2c 20 69 74 2a 69 74 20 29 20 29  1+2+3, it*it ) )
0420: 3b 0a 09 70 72 69 6e 74 28 22 2d 2d 2d 2d 2d 2d  ;..print("------
0430: 2d 2d 2d 2d 2d 2d 2d 2d 22 29 3b 0a 09 70 72 69  --------");..pri
0440: 6e 74 28 70 6f 77 31 30 28 31 29 29 3b 0a 09 70  nt(pow10(1));..p
0450: 72 69 6e 74 28 70 6f 77 31 30 28 32 29 29 3b 0a  rint(pow10(2));.
0460: 09 70 72 69 6e 74 28 22 2d 2d 2d 2d 2d 2d 2d 2d  .print("--------
0470: 2d 2d 2d 2d 2d 2d 22 29 3b 0a 09 70 72 69 6e 74  ------");..print
0480: 28 70 6f 77 31 30 48 61 72 64 28 31 29 29 3b 0a  (pow10Hard(1));.
0490: 09 70 72 69 6e 74 28 70 6f 77 31 30 48 61 72 64  .print(pow10Hard
04a0: 28 32 29 29 3b 0a 7d 3b 0a 0a 6d 61 69 6e 28 29  (2));.};..main()
04b0: 3b 0a 0a 40 6d 61 63 72 6f 20 66 6f 6f 28 79 29  ;..@macro foo(y)
04c0: 0a 7b 0a 09 66 75 6e 28 79 29 7b 79 7d 28 33 30  .{..fun(y){y}(30
04d0: 30 29 0a 23 09 6c 65 74 20 79 20 3d 20 33 30 30  0).#.let y = 300
04e0: 20 69 6e 20 79 0a 7d 3b 0a 0a 70 72 69 6e 74 28   in y.};..print(
04f0: 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22  "--------------"
0500: 29 3b 0a 70 72 69 6e 74 28 66 6f 6f 28 32 30 30  );.print(foo(200
0510: 29 29 3b 0a                                      ));.