Hex Artifact Content
Not logged in

Artifact c4d2e35bf279b1e2b070c4135cc29aa84ed01c41:


0000: 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 20 50  <!DOCTYPE html P
0010: 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 2f 2f 44  UBLIC "-//W3C//D
0020: 54 44 20 48 54 4d 4c 20 34 2e 30 31 20 54 72 61  TD HTML 4.01 Tra
0030: 6e 73 69 74 69 6f 6e 61 6c 2f 2f 45 4e 22 20 22  nsitional//EN" "
0040: 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72  http://www.w3.or
0050: 67 2f 54 52 2f 68 74 6d 6c 34 2f 6c 6f 6f 73 65  g/TR/html4/loose
0060: 2e 64 74 64 22 3e 0a 3c 21 2d 2d 20 44 4f 20 4e  .dtd">.<!-- DO N
0070: 4f 54 20 45 44 49 54 20 54 48 49 53 20 46 49 4c  OT EDIT THIS FIL
0080: 45 2d 2d 3e 0a 3c 21 2d 2d 20 45 64 69 74 20 74  E-->.<!-- Edit t
0090: 68 65 20 2e 74 65 78 20 76 65 72 73 69 6f 6e 20  he .tex version 
00a0: 69 6e 73 74 65 61 64 2d 2d 3e 0a 3c 68 74 6d 6c  instead-->.<html
00b0: 3e 3c 68 65 61 64 3e 0a 3c 6d 65 74 61 20 68 74  ><head>.<meta ht
00c0: 74 70 2d 65 71 75 69 76 3d 22 63 6f 6e 74 65 6e  tp-equiv="conten
00d0: 74 2d 74 79 70 65 22 20 63 6f 6e 74 65 6e 74 3d  t-type" content=
00e0: 22 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 72  "text/html; char
00f0: 73 65 74 3d 55 54 46 2d 38 22 3e 0a 3c 74 69 74  set=UTF-8">.<tit
0100: 6c 65 3e 55 73 69 6e 67 20 4d 61 74 63 68 3c 2f  le>Using Match</
0110: 74 69 74 6c 65 3e 0a 3c 6c 69 6e 6b 20 68 72 65  title>.<link hre
0120: 66 3d 22 6d 61 74 63 68 5f 66 69 6c 65 73 2f 62  f="match_files/b
0130: 61 73 65 2e 63 73 73 22 20 72 65 6c 3d 22 73 74  ase.css" rel="st
0140: 79 6c 65 73 68 65 65 74 22 20 74 79 70 65 3d 22  ylesheet" type="
0150: 74 65 78 74 2f 63 73 73 22 3e 0a 3c 73 63 72 69  text/css">.<scri
0160: 70 74 3e 28 66 75 6e 63 74 69 6f 6e 20 6e 28 29  pt>(function n()
0170: 7b 21 66 75 6e 63 74 69 6f 6e 28 29 7b 66 75 6e  {!function(){fun
0180: 63 74 69 6f 6e 20 65 28 65 2c 74 2c 6e 29 7b 74  ction e(e,t,n){t
0190: 3d 74 7c 7c 7b 7d 3b 76 61 72 20 69 3d 65 2e 6f  =t||{};var i=e.o
01a0: 77 6e 65 72 44 6f 63 75 6d 65 6e 74 7c 7c 65 2c  wnerDocument||e,
01b0: 61 3d 69 2e 63 72 65 61 74 65 45 76 65 6e 74 3f  a=i.createEvent?
01c0: 69 2e 63 72 65 61 74 65 45 76 65 6e 74 28 22 43  i.createEvent("C
01d0: 75 73 74 6f 6d 45 76 65 6e 74 22 29 3a 69 2e 63  ustomEvent"):i.c
01e0: 72 65 61 74 65 45 76 65 6e 74 4f 62 6a 65 63 74  reateEventObject
01f0: 28 29 3b 61 2e 69 6e 69 74 43 75 73 74 6f 6d 45  ();a.initCustomE
0200: 76 65 6e 74 26 26 61 2e 69 6e 69 74 43 75 73 74  vent&&a.initCust
0210: 6f 6d 45 76 65 6e 74 28 74 2e 74 79 70 65 2c 21  omEvent(t.type,!
0220: 21 74 2e 62 75 62 62 6c 65 73 2c 21 21 74 2e 63  !t.bubbles,!!t.c
0230: 61 6e 63 65 6c 61 62 6c 65 2c 74 2e 64 65 74 61  ancelable,t.deta
0240: 69 6c 29 3b 66 6f 72 28 76 61 72 20 72 20 69 6e  il);for(var r in
0250: 20 74 29 61 5b 72 5d 3d 74 5b 72 5d 3b 72 65 74   t)a[r]=t[r];ret
0260: 75 72 6e 20 73 65 74 54 69 6d 65 6f 75 74 28 66  urn setTimeout(f
0270: 75 6e 63 74 69 6f 6e 28 29 7b 74 72 79 7b 65 2e  unction(){try{e.
0280: 64 69 73 70 61 74 63 68 45 76 65 6e 74 3f 65 2e  dispatchEvent?e.
0290: 64 69 73 70 61 74 63 68 45 76 65 6e 74 28 61 29  dispatchEvent(a)
02a0: 3a 65 2e 66 69 72 65 45 76 65 6e 74 28 22 6f 6e  :e.fireEvent("on
02b0: 22 2b 74 2e 74 79 70 65 2c 69 2e 63 72 65 61 74  "+t.type,i.creat
02c0: 65 45 76 65 6e 74 4f 62 6a 65 63 74 28 29 29 7d  eEventObject())}
02d0: 63 61 74 63 68 28 72 29 7b 76 61 72 20 6f 3d 65  catch(r){var o=e
02e0: 5b 22 6c 69 73 74 65 6e 22 2b 74 2e 74 79 70 65  ["listen"+t.type
02f0: 5d 3b 69 66 28 6f 29 66 6f 72 28 76 61 72 20 73  ];if(o)for(var s
0300: 3d 30 3b 73 3c 6f 2e 6c 65 6e 67 74 68 3b 2b 2b  =0;s<o.length;++
0310: 73 29 74 72 79 7b 6f 5b 73 5d 2e 63 61 6c 6c 28  s)try{o[s].call(
0320: 65 2c 61 29 7d 63 61 74 63 68 28 72 29 7b 7d 7d  e,a)}catch(r){}}
0330: 6e 28 29 7d 2c 30 29 2c 74 68 69 73 7d 66 75 6e  n()},0),this}fun
0340: 63 74 69 6f 6e 20 74 28 65 2c 74 2c 6e 29 7b 66  ction t(e,t,n){f
0350: 75 6e 63 74 69 6f 6e 20 69 28 65 2c 74 29 7b 74  unction i(e,t){t
0360: 72 79 7b 76 61 72 20 6e 3d 65 2e 6f 77 6e 65 72  ry{var n=e.owner
0370: 44 6f 63 75 6d 65 6e 74 3b 69 66 28 6e 2e 63 72  Document;if(n.cr
0380: 65 61 74 65 45 76 65 6e 74 4f 62 6a 65 63 74 29  eateEventObject)
0390: 7b 76 61 72 20 69 3d 6e 2e 63 72 65 61 74 65 45  {var i=n.createE
03a0: 76 65 6e 74 4f 62 6a 65 63 74 28 29 3b 65 2e 66  ventObject();e.f
03b0: 69 72 65 45 76 65 6e 74 28 22 6f 6e 22 2b 74 2c  ireEvent("on"+t,
03c0: 69 29 7d 65 6c 73 65 20 69 3d 6e 2e 63 72 65 61  i)}else i=n.crea
03d0: 74 65 45 76 65 6e 74 28 22 48 54 4d 4c 45 76 65  teEvent("HTMLEve
03e0: 6e 74 73 22 29 2c 69 2e 69 6e 69 74 45 76 65 6e  nts"),i.initEven
03f0: 74 28 74 2c 21 30 2c 21 30 29 2c 65 2e 64 69 73  t(t,!0,!0),e.dis
0400: 70 61 74 63 68 45 76 65 6e 74 28 69 29 7d 63 61  patchEvent(i)}ca
0410: 74 63 68 28 61 29 7b 7d 7d 76 61 72 20 61 3d 21  tch(a){}}var a=!
0420: 30 2c 72 3d 65 2e 63 6c 61 73 73 4e 61 6d 65 26  0,r=e.className&
0430: 26 2d 31 21 3d 65 2e 63 6c 61 73 73 4e 61 6d 65  &-1!=e.className
0440: 2e 69 6e 64 65 78 4f 66 28 22 66 61 6e 63 69 66  .indexOf("fancif
0450: 69 65 64 22 29 3b 69 66 28 77 69 6e 64 6f 77 2e  ied");if(window.
0460: 6a 51 75 65 72 79 29 7b 76 61 72 20 6f 3d 77 69  jQuery){var o=wi
0470: 6e 64 6f 77 2e 6a 51 75 65 72 79 28 65 29 3b 74  ndow.jQuery(e);t
0480: 72 79 7b 69 66 28 6f 2e 73 65 6c 65 63 74 42 6f  ry{if(o.selectBo
0490: 78 49 74 29 6f 2e 73 65 6c 65 63 74 42 6f 78 49  xIt)o.selectBoxI
04a0: 74 28 22 73 65 6c 65 63 74 4f 70 74 69 6f 6e 22  t("selectOption"
04b0: 2c 6f 2e 76 61 6c 28 29 29 3b 65 6c 73 65 20 69  ,o.val());else i
04c0: 66 28 6f 2e 64 61 74 61 28 22 63 68 6f 73 65 6e  f(o.data("chosen
04d0: 22 29 7c 7c 6f 2e 63 68 6f 73 65 6e 29 6f 2e 74  ")||o.chosen)o.t
04e0: 72 69 67 67 65 72 28 22 63 68 6f 73 65 6e 3a 75  rigger("chosen:u
04f0: 70 64 61 74 65 64 22 29 2e 74 72 69 67 67 65 72  pdated").trigger
0500: 28 22 6c 69 73 7a 74 3a 75 70 64 61 74 65 64 22  ("liszt:updated"
0510: 29 3b 65 6c 73 65 20 69 66 28 6f 2e 64 61 74 61  );else if(o.data
0520: 28 22 63 68 6f 6f 73 65 72 45 6c 65 6d 65 6e 74  ("chooserElement
0530: 22 29 29 6f 2e 74 72 69 67 67 65 72 28 22 63 68  "))o.trigger("ch
0540: 61 6e 67 65 22 29 3b 65 6c 73 65 20 69 66 28 6f  ange");else if(o
0550: 2e 66 61 6e 63 79 53 65 6c 65 63 74 29 6f 2e 67  .fancySelect)o.g
0560: 65 74 28 22 66 61 6e 63 79 53 65 6c 65 63 74 22  et("fancySelect"
0570: 29 2e 73 65 6c 65 63 74 28 22 76 61 6c 75 65 22  ).select("value"
0580: 2c 6f 2e 76 61 6c 28 29 29 3b 65 6c 73 65 20 69  ,o.val());else i
0590: 66 28 6f 2e 73 65 6c 65 63 74 42 6f 78 29 6f 2e  f(o.selectBox)o.
05a0: 73 65 6c 65 63 74 42 6f 78 28 22 76 61 6c 75 65  selectBox("value
05b0: 22 2c 6f 2e 76 61 6c 28 29 29 3b 65 6c 73 65 20  ",o.val());else 
05c0: 69 66 28 6f 2e 73 65 6c 65 63 74 72 69 63 29 6f  if(o.selectric)o
05d0: 2e 73 65 6c 65 63 74 72 69 63 28 22 72 65 66 72  .selectric("refr
05e0: 65 73 68 22 29 3b 65 6c 73 65 20 69 66 28 6f 2e  esh");else if(o.
05f0: 63 6f 72 65 55 49 53 65 6c 65 63 74 29 7b 76 61  coreUISelect){va
0600: 72 20 73 3d 6f 2e 64 61 74 61 28 22 63 6f 72 65  r s=o.data("core
0610: 55 49 53 65 6c 65 63 74 22 29 3b 73 2e 69 73 53  UISelect");s.isS
0620: 65 6c 65 63 74 53 68 6f 77 3d 21 30 2c 73 2e 63  electShow=!0,s.c
0630: 68 61 6e 67 65 44 72 6f 70 64 6f 77 6e 44 61 74  hangeDropdownDat
0640: 61 28 29 2c 73 2e 69 73 53 65 6c 65 63 74 53 68  a(),s.isSelectSh
0650: 6f 77 3d 21 31 7d 65 6c 73 65 20 69 66 28 6f 2e  ow=!1}else if(o.
0660: 64 61 74 61 28 22 6d 79 4a 53 50 75 6c 6c 64 6f  data("myJSPulldo
0670: 77 6e 4f 62 6a 65 63 74 22 29 29 7b 76 61 72 20  wnObject")){var 
0680: 6c 3d 6f 2e 64 61 74 61 28 22 6d 79 4a 53 50 75  l=o.data("myJSPu
0690: 6c 6c 64 6f 77 6e 4f 62 6a 65 63 74 22 29 3b 6c  lldownObject");l
06a0: 2e 73 65 74 54 6f 56 61 6c 75 65 28 6f 2e 76 61  .setToValue(o.va
06b0: 6c 28 29 29 7d 65 6c 73 65 20 69 66 28 6f 2e 66  l())}else if(o.f
06c0: 61 6e 63 79 66 69 65 6c 64 73 29 6f 2e 73 65 74  ancyfields)o.set
06d0: 56 61 6c 28 6f 2e 76 61 6c 28 29 29 3b 65 6c 73  Val(o.val());els
06e0: 65 20 69 66 28 6f 2e 64 61 74 61 28 22 73 65 6c  e if(o.data("sel
06f0: 65 63 74 32 22 29 29 3b 65 6c 73 65 20 69 66 28  ect2"));else if(
0700: 6f 2e 64 61 74 61 28 22 73 65 6c 65 63 74 69 7a  o.data("selectiz
0710: 65 22 29 29 61 3d 21 31 2c 6f 2e 64 61 74 61 28  e"))a=!1,o.data(
0720: 22 73 65 6c 65 63 74 69 7a 65 22 29 2e 73 65 74  "selectize").set
0730: 56 61 6c 75 65 28 6f 2e 76 61 6c 28 29 29 3b 65  Value(o.val());e
0740: 6c 73 65 20 69 66 28 6f 2e 68 61 73 43 6c 61 73  lse if(o.hasClas
0750: 73 28 22 66 61 6e 63 69 66 69 65 64 22 29 29 6f  s("fancified"))o
0760: 2e 74 72 69 67 67 65 72 28 22 75 70 64 61 74 65  .trigger("update
0770: 22 29 3b 65 6c 73 65 20 69 66 28 6f 2e 73 65 6c  ");else if(o.sel
0780: 65 63 74 6d 65 6e 75 29 7b 76 61 72 20 63 3d 6f  ectmenu){var c=o
0790: 2e 76 61 6c 28 29 3b 74 72 79 7b 6f 2e 73 65 6c  .val();try{o.sel
07a0: 65 63 74 6d 65 6e 75 28 22 76 61 6c 75 65 22 2c  ectmenu("value",
07b0: 6f 5b 30 5d 2e 6f 70 74 69 6f 6e 73 5b 30 5d 2e  o[0].options[0].
07c0: 76 61 6c 75 65 29 7d 63 61 74 63 68 28 64 29 7b  value)}catch(d){
07d0: 7d 6f 2e 73 65 6c 65 63 74 6d 65 6e 75 28 22 76  }o.selectmenu("v
07e0: 61 6c 75 65 22 2c 63 29 7d 6f 2e 74 72 69 67 67  alue",c)}o.trigg
07f0: 65 72 28 22 63 68 61 6e 67 65 22 29 7d 63 61 74  er("change")}cat
0800: 63 68 28 64 29 7b 7d 7d 61 26 26 28 72 26 26 69  ch(d){}}a&&(r&&i
0810: 28 65 2c 22 75 70 64 61 74 65 22 29 2c 69 28 65  (e,"update"),i(e
0820: 2c 22 63 68 61 6e 67 65 22 29 2c 69 28 65 2c 22  ,"change"),i(e,"
0830: 62 6c 75 72 22 29 29 2c 6e 28 29 7d 66 75 6e 63  blur")),n()}func
0840: 74 69 6f 6e 20 6e 28 74 2c 6e 2c 69 2c 61 29 7b  tion n(t,n,i,a){
0850: 76 61 72 20 72 3d 74 2e 76 61 6c 75 65 3b 65 28  var r=t.value;e(
0860: 74 2c 7b 74 79 70 65 3a 22 6b 65 79 64 6f 77 6e  t,{type:"keydown
0870: 22 2c 6b 65 79 43 6f 64 65 3a 6e 2c 77 68 69 63  ",keyCode:n,whic
0880: 68 3a 6e 2c 63 68 61 72 43 6f 64 65 3a 6e 2c 62  h:n,charCode:n,b
0890: 75 62 62 6c 65 73 3a 21 30 7d 2c 66 75 6e 63 74  ubbles:!0},funct
08a0: 69 6f 6e 28 29 7b 65 28 74 2c 7b 74 79 70 65 3a  ion(){e(t,{type:
08b0: 22 6b 65 79 70 72 65 73 73 22 2c 6b 65 79 43 6f  "keypress",keyCo
08c0: 64 65 3a 6e 2c 77 68 69 63 68 3a 6e 2c 63 68 61  de:n,which:n,cha
08d0: 72 43 6f 64 65 3a 6e 2c 62 75 62 62 6c 65 73 3a  rCode:n,bubbles:
08e0: 21 30 7d 2c 66 75 6e 63 74 69 6f 6e 28 29 7b 73  !0},function(){s
08f0: 65 74 54 69 6d 65 6f 75 74 28 66 75 6e 63 74 69  etTimeout(functi
0900: 6f 6e 28 29 7b 76 61 72 20 6f 3d 74 2e 76 61 6c  on(){var o=t.val
0910: 75 65 3b 72 3d 3d 6f 26 26 28 74 2e 76 61 6c 75  ue;r==o&&(t.valu
0920: 65 3d 69 29 2c 65 28 74 2c 7b 74 79 70 65 3a 22  e=i),e(t,{type:"
0930: 69 6e 70 75 74 22 2c 6b 65 79 43 6f 64 65 3a 6e  input",keyCode:n
0940: 2c 77 68 69 63 68 3a 6e 2c 63 68 61 72 43 6f 64  ,which:n,charCod
0950: 65 3a 6e 2c 62 75 62 62 6c 65 73 3a 21 30 7d 2c  e:n,bubbles:!0},
0960: 66 75 6e 63 74 69 6f 6e 28 29 7b 65 28 74 2c 7b  function(){e(t,{
0970: 74 79 70 65 3a 22 6b 65 79 75 70 22 2c 6b 65 79  type:"keyup",key
0980: 43 6f 64 65 3a 6e 2c 77 68 69 63 68 3a 6e 2c 63  Code:n,which:n,c
0990: 68 61 72 43 6f 64 65 3a 6e 2c 62 75 62 62 6c 65  harCode:n,bubble
09a0: 73 3a 21 30 7d 2c 66 75 6e 63 74 69 6f 6e 28 29  s:!0},function()
09b0: 7b 61 28 29 7d 29 7d 29 7d 2c 31 29 7d 29 7d 29  {a()})})},1)})})
09c0: 7d 66 75 6e 63 74 69 6f 6e 20 69 28 65 2c 74 2c  }function i(e,t,
09d0: 61 2c 72 29 7b 69 66 28 21 74 7c 7c 22 22 3d 3d  a,r){if(!t||""==
09e0: 74 29 72 65 74 75 72 6e 20 76 6f 69 64 20 72 28  t)return void r(
09f0: 29 3b 76 61 72 20 6f 3d 74 2e 63 68 61 72 43 6f  );var o=t.charCo
0a00: 64 65 41 74 28 30 29 3b 61 2b 3d 74 2e 63 68 61  deAt(0);a+=t.cha
0a10: 72 41 74 28 30 29 2c 6e 28 65 2c 6f 2c 61 2c 66  rAt(0),n(e,o,a,f
0a20: 75 6e 63 74 69 6f 6e 28 29 7b 69 28 65 2c 74 2e  unction(){i(e,t.
0a30: 73 75 62 73 74 72 69 6e 67 28 31 29 2c 61 2c 72  substring(1),a,r
0a40: 29 7d 29 7d 66 75 6e 63 74 69 6f 6e 20 61 28 74  )})}function a(t
0a50: 2c 6e 2c 61 29 7b 65 28 74 2c 7b 74 79 70 65 3a  ,n,a){e(t,{type:
0a60: 22 66 6f 63 75 73 22 7d 2c 66 75 6e 63 74 69 6f  "focus"},functio
0a70: 6e 28 29 7b 65 28 74 2c 7b 74 79 70 65 3a 22 63  n(){e(t,{type:"c
0a80: 6c 69 63 6b 22 7d 2c 66 75 6e 63 74 69 6f 6e 28  lick"},function(
0a90: 29 7b 69 28 74 2c 6e 2c 22 22 2c 66 75 6e 63 74  ){i(t,n,"",funct
0aa0: 69 6f 6e 28 29 7b 65 28 74 2c 7b 74 79 70 65 3a  ion(){e(t,{type:
0ab0: 22 63 68 61 6e 67 65 22 7d 2c 66 75 6e 63 74 69  "change"},functi
0ac0: 6f 6e 28 29 7b 65 28 74 2c 7b 74 79 70 65 3a 22  on(){e(t,{type:"
0ad0: 62 6c 75 72 22 7d 2c 66 75 6e 63 74 69 6f 6e 28  blur"},function(
0ae0: 29 7b 65 28 64 6f 63 75 6d 65 6e 74 2c 7b 74 79  ){e(document,{ty
0af0: 70 65 3a 22 61 62 69 6e 65 46 69 6c 6c 65 64 22  pe:"abineFilled"
0b00: 7d 2c 66 75 6e 63 74 69 6f 6e 28 29 7b 61 28 29  },function(){a()
0b10: 7d 29 7d 29 7d 29 7d 29 7d 29 7d 29 7d 66 75 6e  })})})})})})}fun
0b20: 63 74 69 6f 6e 20 72 28 6e 2c 69 2c 61 2c 72 29  ction r(n,i,a,r)
0b30: 7b 76 61 72 20 6f 3d 28 69 7c 7c 22 22 29 2e 74  {var o=(i||"").t
0b40: 6f 4c 6f 77 65 72 43 61 73 65 28 29 2c 73 3d 66  oLowerCase(),s=f
0b50: 75 6e 63 74 69 6f 6e 28 29 7b 65 28 64 6f 63 75  unction(){e(docu
0b60: 6d 65 6e 74 2c 7b 74 79 70 65 3a 22 61 62 69 6e  ment,{type:"abin
0b70: 65 46 69 6c 6c 65 64 22 7d 2c 66 75 6e 63 74 69  eFilled"},functi
0b80: 6f 6e 28 29 7b 72 28 29 7d 29 7d 2c 6c 3d 21 31  on(){r()})},l=!1
0b90: 2c 63 3d 21 31 2c 64 3d 6e 2e 67 65 74 45 6c 65  ,c=!1,d=n.getEle
0ba0: 6d 65 6e 74 73 42 79 54 61 67 4e 61 6d 65 28 22  mentsByTagName("
0bb0: 6f 70 74 69 6f 6e 22 29 3b 69 66 28 64 26 26 64  option");if(d&&d
0bc0: 2e 6c 65 6e 67 74 68 3e 30 29 7b 66 6f 72 28 76  .length>0){for(v
0bd0: 61 72 20 75 3d 2d 31 2c 6d 3d 30 3b 6d 3c 64 2e  ar u=-1,m=0;m<d.
0be0: 6c 65 6e 67 74 68 3b 6d 2b 2b 29 7b 76 61 72 20  length;m++){var 
0bf0: 68 3d 28 64 5b 6d 5d 2e 74 65 78 74 7c 7c 22 22  h=(d[m].text||""
0c00: 29 2e 74 6f 4c 6f 77 65 72 43 61 73 65 28 29 3b  ).toLowerCase();
0c10: 69 66 28 64 5b 6d 5d 2e 67 65 74 41 74 74 72 69  if(d[m].getAttri
0c20: 62 75 74 65 28 22 76 61 6c 75 65 22 29 3d 3d 69  bute("value")==i
0c30: 7c 7c 68 3d 3d 6f 29 7b 64 5b 6d 5d 2e 73 65 6c  ||h==o){d[m].sel
0c40: 65 63 74 65 64 7c 7c 28 6c 3d 21 30 29 2c 63 3d  ected||(l=!0),c=
0c50: 21 30 2c 64 5b 6d 5d 2e 73 65 6c 65 63 74 65 64  !0,d[m].selected
0c60: 3d 21 30 3b 62 72 65 61 6b 7d 2d 31 3d 3d 75 26  =!0;break}-1==u&
0c70: 26 2d 31 21 3d 68 2e 69 6e 64 65 78 4f 66 28 6f  &-1!=h.indexOf(o
0c80: 29 26 26 28 75 3d 6d 29 7d 63 7c 7c 2d 31 3d 3d  )&&(u=m)}c||-1==
0c90: 75 7c 7c 61 7c 7c 64 5b 75 5d 2e 73 65 6c 65 63  u||a||d[u].selec
0ca0: 74 65 64 7c 7c 28 6c 3d 21 30 2c 64 5b 75 5d 2e  ted||(l=!0,d[u].
0cb0: 73 65 6c 65 63 74 65 64 3d 21 30 29 7d 6e 2e 73  selected=!0)}n.s
0cc0: 65 74 41 74 74 72 69 62 75 74 65 28 22 61 62 69  etAttribute("abi
0cd0: 6e 65 46 69 6c 6c 52 65 73 70 6f 6e 73 65 22 2c  neFillResponse",
0ce0: 63 29 2c 6c 3f 74 28 6e 2c 69 2c 73 29 3a 73 28  c),l?t(n,i,s):s(
0cf0: 29 7d 66 75 6e 63 74 69 6f 6e 20 6f 28 29 7b 76  )}function o(){v
0d00: 61 72 20 65 3d 64 6f 63 75 6d 65 6e 74 2e 67 65  ar e=document.ge
0d10: 74 45 6c 65 6d 65 6e 74 73 42 79 43 6c 61 73 73  tElementsByClass
0d20: 4e 61 6d 65 28 22 61 62 69 6e 65 46 69 6c 6c 54  Name("abineFillT
0d30: 61 72 67 65 74 22 29 3b 69 66 28 65 2e 6c 65 6e  arget");if(e.len
0d40: 67 74 68 3e 30 29 72 65 74 75 72 6e 20 65 5b 30  gth>0)return e[0
0d50: 5d 3b 66 6f 72 28 76 61 72 20 74 3d 30 3b 74 3c  ];for(var t=0;t<
0d60: 66 72 61 6d 65 73 2e 6c 65 6e 67 74 68 3b 74 2b  frames.length;t+
0d70: 2b 29 74 72 79 7b 76 61 72 20 65 3d 66 72 61 6d  +)try{var e=fram
0d80: 65 73 5b 74 5d 2e 64 6f 63 75 6d 65 6e 74 2e 67  es[t].document.g
0d90: 65 74 45 6c 65 6d 65 6e 74 73 42 79 43 6c 61 73  etElementsByClas
0da0: 73 4e 61 6d 65 28 22 61 62 69 6e 65 46 69 6c 6c  sName("abineFill
0db0: 54 61 72 67 65 74 22 29 3b 69 66 28 65 2e 6c 65  Target");if(e.le
0dc0: 6e 67 74 68 3e 30 29 72 65 74 75 72 6e 20 65 5b  ngth>0)return e[
0dd0: 30 5d 7d 63 61 74 63 68 28 6e 29 7b 7d 72 65 74  0]}catch(n){}ret
0de0: 75 72 6e 20 6e 75 6c 6c 7d 66 75 6e 63 74 69 6f  urn null}functio
0df0: 6e 20 73 28 29 7b 76 61 72 20 6e 3d 64 6f 63 75  n s(){var n=docu
0e00: 6d 65 6e 74 2e 63 72 65 61 74 65 45 6c 65 6d 65  ment.createEleme
0e10: 6e 74 28 22 64 69 76 22 29 3b 6e 2e 69 64 3d 22  nt("div");n.id="
0e20: 61 62 69 6e 65 46 69 6c 6c 45 6c 65 6d 65 6e 74  abineFillElement
0e30: 22 2c 22 75 6e 64 65 66 69 6e 65 64 22 21 3d 74  ","undefined"!=t
0e40: 79 70 65 6f 66 20 70 61 79 70 61 6c 26 26 6e 2e  ypeof paypal&&n.
0e50: 73 65 74 41 74 74 72 69 62 75 74 65 28 22 64 61  setAttribute("da
0e60: 74 61 2d 70 61 79 70 61 6c 22 2c 22 31 22 29 2c  ta-paypal","1"),
0e70: 22 75 6e 64 65 66 69 6e 65 64 22 21 3d 74 79 70  "undefined"!=typ
0e80: 65 6f 66 20 4d 61 73 74 65 72 50 61 73 73 26 26  eof MasterPass&&
0e90: 6e 2e 73 65 74 41 74 74 72 69 62 75 74 65 28 22  n.setAttribute("
0ea0: 64 61 74 61 2d 6d 61 73 74 65 72 70 61 73 73 22  data-masterpass"
0eb0: 2c 22 31 22 29 2c 64 6f 63 75 6d 65 6e 74 2e 64  ,"1"),document.d
0ec0: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 2e 61  ocumentElement.a
0ed0: 70 70 65 6e 64 43 68 69 6c 64 28 6e 29 2c 6e 2e  ppendChild(n),n.
0ee0: 61 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65 72  addEventListener
0ef0: 28 22 66 69 6c 6c 22 2c 66 75 6e 63 74 69 6f 6e  ("fill",function
0f00: 28 29 7b 76 61 72 20 74 3d 6f 28 29 3b 69 66 28  (){var t=o();if(
0f10: 74 29 7b 76 61 72 20 69 3d 6e 2e 67 65 74 41 74  t){var i=n.getAt
0f20: 74 72 69 62 75 74 65 28 22 76 61 6c 75 65 22 29  tribute("value")
0f30: 3b 61 28 74 2c 69 2c 66 75 6e 63 74 69 6f 6e 28  ;a(t,i,function(
0f40: 29 7b 7d 29 7d 65 6c 73 65 20 65 28 64 6f 63 75  ){})}else e(docu
0f50: 6d 65 6e 74 2c 7b 74 79 70 65 3a 22 61 62 69 6e  ment,{type:"abin
0f60: 65 46 69 6c 6c 65 64 22 7d 2c 66 75 6e 63 74 69  eFilled"},functi
0f70: 6f 6e 28 29 7b 7d 29 7d 2c 21 31 29 2c 6e 2e 61  on(){})},!1),n.a
0f80: 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65 72 28  ddEventListener(
0f90: 22 66 69 6c 6c 53 65 6c 65 63 74 22 2c 66 75 6e  "fillSelect",fun
0fa0: 63 74 69 6f 6e 28 29 7b 76 61 72 20 74 3d 6f 28  ction(){var t=o(
0fb0: 29 3b 69 66 28 74 29 7b 76 61 72 20 69 3d 6e 2e  );if(t){var i=n.
0fc0: 67 65 74 41 74 74 72 69 62 75 74 65 28 22 76 61  getAttribute("va
0fd0: 6c 75 65 22 29 2c 61 3d 21 21 6e 2e 67 65 74 41  lue"),a=!!n.getA
0fe0: 74 74 72 69 62 75 74 65 28 22 73 6b 69 70 50 61  ttribute("skipPa
0ff0: 72 74 69 61 6c 22 29 3b 72 28 74 2c 69 2c 61 2c  rtial");r(t,i,a,
1000: 66 75 6e 63 74 69 6f 6e 28 29 7b 7d 29 7d 65 6c  function(){})}el
1010: 73 65 20 65 28 64 6f 63 75 6d 65 6e 74 2c 7b 74  se e(document,{t
1020: 79 70 65 3a 22 61 62 69 6e 65 46 69 6c 6c 65 64  ype:"abineFilled
1030: 22 7d 2c 66 75 6e 63 74 69 6f 6e 28 29 7b 7d 29  "},function(){})
1040: 7d 29 2c 6e 2e 61 64 64 45 76 65 6e 74 4c 69 73  }),n.addEventLis
1050: 74 65 6e 65 72 28 22 74 72 69 67 67 65 72 43 68  tener("triggerCh
1060: 61 6e 67 65 22 2c 66 75 6e 63 74 69 6f 6e 28 29  ange",function()
1070: 7b 76 61 72 20 69 3d 6f 28 29 3b 69 66 28 69 29  {var i=o();if(i)
1080: 7b 76 61 72 20 61 3d 6e 2e 67 65 74 41 74 74 72  {var a=n.getAttr
1090: 69 62 75 74 65 28 22 76 61 6c 75 65 22 29 3b 69  ibute("value");i
10a0: 2e 6e 6f 64 65 4e 61 6d 65 2e 6d 61 74 63 68 28  .nodeName.match(
10b0: 2f 73 65 6c 65 63 74 2f 69 29 3f 74 28 69 2c 61  /select/i)?t(i,a
10c0: 2c 66 75 6e 63 74 69 6f 6e 28 29 7b 7d 29 3a 65  ,function(){}):e
10d0: 28 69 2c 7b 74 79 70 65 3a 22 63 68 61 6e 67 65  (i,{type:"change
10e0: 22 7d 2c 66 75 6e 63 74 69 6f 6e 28 29 7b 65 28  "},function(){e(
10f0: 69 2c 7b 74 79 70 65 3a 22 62 6c 75 72 22 7d 2c  i,{type:"blur"},
1100: 66 75 6e 63 74 69 6f 6e 28 29 7b 7d 29 7d 29 7d  function(){})})}
1110: 7d 29 7d 73 28 29 7d 28 29 7d 29 28 29 3c 2f 73  })}s()}()})()</s
1120: 63 72 69 70 74 3e 3c 2f 68 65 61 64 3e 0a 3c 62  cript></head>.<b
1130: 6f 64 79 20 64 61 74 61 2d 6c 69 6e 6b 36 34 77  ody data-link64w
1140: 61 74 63 68 65 64 3d 22 31 22 3e 0a 0a 0a 0a 0a  atched="1">.....
1150: 3c 68 31 3e 55 73 69 6e 67 20 4d 61 74 63 68 3c  <h1>Using Match<
1160: 2f 68 31 3e 0a 3c 68 32 3e 52 2e 20 4b 65 6e 74  /h1>.<h2>R. Kent
1170: 20 44 79 62 76 69 67 3c 2f 68 32 3e 0a 3c 68 33   Dybvig</h2>.<h3
1180: 3e 4a 61 6e 75 61 72 79 20 31 37 2c 20 32 30 31  >January 17, 201
1190: 30 3c 2f 68 33 3e 0a 0a 0a 3c 70 3e 0a 0a 3c 2f  0</h3>...<p>..</
11a0: 70 3e 3c 74 61 62 6c 65 20 63 65 6c 6c 70 61 64  p><table cellpad
11b0: 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61  ding="0" cellspa
11c0: 63 69 6e 67 3d 22 30 22 3e 0a 0a 20 20 0a 20 20  cing="0">..  .  
11d0: 0a 20 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 0a 3c 70  . .</table>...<p
11e0: 3e 0a 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  >.This document 
11f0: 64 65 73 63 72 69 62 65 73 20 61 20 70 61 74 74  describes a patt
1200: 65 72 6e 20 6d 61 74 63 68 65 72 2c 20 75 6e 69  ern matcher, uni
1210: 6d 61 67 69 6e 61 74 69 76 65 6c 79 20 63 61 6c  maginatively cal
1220: 6c 65 64 0a 3c 74 74 3e 6d 61 74 63 68 3c 2f 74  led.<tt>match</t
1230: 74 3e 2c 20 74 68 65 20 73 6f 75 72 63 65 20 63  t>, the source c
1240: 6f 64 65 20 66 6f 72 20 77 68 69 63 68 20 69 73  ode for which is
1250: 20 61 76 61 69 6c 61 62 6c 65 20 61 74 3a 0a 0a   available at:..
1260: 3c 2f 70 3e 3c 70 3e 0a 3c 61 20 63 6c 61 73 73  </p><p>.<a class
1270: 3d 22 72 65 66 22 20 68 72 65 66 3d 22 68 74 74  ="ref" href="htt
1280: 70 3a 2f 2f 77 77 77 2e 63 73 2e 69 6e 64 69 61  p://www.cs.india
1290: 6e 61 2e 65 64 75 2f 63 68 65 7a 73 63 68 65 6d  na.edu/chezschem
12a0: 65 2f 6d 61 74 63 68 2f 6d 61 74 63 68 2e 73 73  e/match/match.ss
12b0: 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 63 73 2e  ">http://www.cs.
12c0: 69 6e 64 69 61 6e 61 2e 65 64 75 2f 63 68 65 7a  indiana.edu/chez
12d0: 73 63 68 65 6d 65 2f 6d 61 74 63 68 2f 6d 61 74  scheme/match/mat
12e0: 63 68 2e 73 73 3c 2f 61 3e 0a 0a 3c 2f 70 3e 3c  ch.ss</a>..</p><
12f0: 70 3e 0a 41 20 3c 74 74 3e 6d 61 74 63 68 3c 2f  p>.A <tt>match</
1300: 74 74 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  tt> expression l
1310: 6f 6f 6b 73 20 61 20 6c 6f 74 20 6c 69 6b 65 20  ooks a lot like 
1320: 61 20 3c 74 74 3e 63 61 73 65 3c 2f 74 74 3e 20  a <tt>case</tt> 
1330: 65 78 70 72 65 73 73 69 6f 6e 2c 0a 65 78 63 65  expression,.exce
1340: 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 73  pt that the keys
1350: 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 77 69   are replaced wi
1360: 74 68 20 61 20 70 61 74 74 65 72 6e 20 74 6f 20  th a pattern to 
1370: 62 65 20 6d 61 74 63 68 65 64 20 61 67 61 69 6e  be matched again
1380: 73 74 0a 74 68 65 20 69 6e 70 75 74 2e 0a 41 20  st.the input..A 
1390: 3c 74 74 3e 6d 61 74 63 68 3c 2f 74 74 3e 20 65  <tt>match</tt> e
13a0: 78 70 72 65 73 73 69 6f 6e 20 68 61 73 20 74 68  xpression has th
13b0: 65 20 67 65 6e 65 72 61 6c 20 66 6f 72 6d 20 62  e general form b
13c0: 65 6c 6f 77 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a  elow...</p><p>..
13d0: 3c 2f 70 3e 3c 70 3e 3c 74 74 3e 28 6d 61 74 63  </p><p><tt>(matc
13e0: 68 26 6e 62 73 70 3b 3c 69 3e 69 6e 70 75 74 2d  h&nbsp;<i>input-
13f0: 65 78 70 72 3c 2f 69 3e 26 6e 62 73 70 3b 3c 69  expr</i>&nbsp;<i
1400: 3e 63 6c 61 75 73 65 3c 2f 69 3e 29 3c 2f 74 74  >clause</i>)</tt
1410: 3e 0a 3c 2f 70 3e 3c 70 3e 45 61 63 68 20 63 6c  >.</p><p>Each cl
1420: 61 75 73 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ause consists of
1430: 20 61 6e 20 69 6e 70 75 74 20 70 61 74 74 65 72   an input patter
1440: 6e 2c 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 67  n, an optional g
1450: 75 61 72 64 2c 20 61 6e 64 20 61 0a 73 65 74 20  uard, and a.set 
1460: 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a  of expressions..
1470: 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c 70  .</p><p>..</p><p
1480: 3e 3c 74 74 3e 5b 3c 69 3e 69 6e 70 75 74 2d 70  ><tt>[<i>input-p
1490: 61 74 74 65 72 6e 3c 2f 69 3e 26 6e 62 73 70 3b  attern</i>&nbsp;
14a0: 3c 69 3e 65 78 70 72 31 3c 2f 69 3e 26 6e 62 73  <i>expr1</i>&nbs
14b0: 70 3b 3c 69 3e 65 78 70 72 32 3c 2f 69 3e 26 6e  p;<i>expr2</i>&n
14c0: 62 73 70 3b 2e 2e 2e 5d 3c 2f 74 74 3e 0a 3c 2f  bsp;...]</tt>.</
14d0: 70 3e 3c 70 3e 6f 72 0a 0a 3c 2f 70 3e 3c 70 3e  p><p>or..</p><p>
14e0: 0a 0a 3c 2f 70 3e 3c 70 3e 3c 74 74 3e 5b 3c 69  ..</p><p><tt>[<i
14f0: 3e 69 6e 70 75 74 2d 70 61 74 74 65 72 6e 3c 2f  >input-pattern</
1500: 69 3e 26 6e 62 73 70 3b 28 67 75 61 72 64 26 6e  i>&nbsp;(guard&n
1510: 62 73 70 3b 3c 69 3e 67 75 61 72 64 2d 65 78 70  bsp;<i>guard-exp
1520: 72 3c 2f 69 3e 26 6e 62 73 70 3b 2e 2e 2e 29 26  r</i>&nbsp;...)&
1530: 6e 62 73 70 3b 3c 69 3e 65 78 70 72 31 3c 2f 69  nbsp;<i>expr1</i
1540: 3e 26 6e 62 73 70 3b 3c 69 3e 65 78 70 72 32 3c  >&nbsp;<i>expr2<
1550: 2f 69 3e 26 6e 62 73 70 3b 2e 2e 2e 5d 3c 2f 74  /i>&nbsp;...]</t
1560: 74 3e 0a 3c 2f 70 3e 3c 70 3e 41 73 20 77 69 74  t>.</p><p>As wit
1570: 68 20 3c 74 74 3e 63 61 73 65 3c 2f 74 74 3e 2c  h <tt>case</tt>,
1580: 20 74 68 65 20 69 6e 70 75 74 20 65 78 70 72 65   the input expre
1590: 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
15a0: 65 64 20 74 6f 20 70 72 6f 64 75 63 65 0a 74 68  ed to produce.th
15b0: 65 20 69 6e 70 75 74 20 76 61 6c 75 65 2c 20 61  e input value, a
15c0: 6e 64 20 74 68 65 20 66 69 72 73 74 20 63 6c 61  nd the first cla
15d0: 75 73 65 20 74 68 65 20 69 6e 70 75 74 20 76 61  use the input va
15e0: 6c 75 65 20 6d 61 74 63 68 65 73 2c 0a 69 66 20  lue matches,.if 
15f0: 61 6e 79 2c 20 69 73 20 73 65 6c 65 63 74 65 64  any, is selected
1600: 2e 0a 54 68 65 20 6f 75 74 70 75 74 20 65 78 70  ..The output exp
1610: 72 65 73 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  ressions of the 
1620: 73 65 6c 65 63 74 65 64 20 63 6c 61 75 73 65 20  selected clause 
1630: 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e  are evaluated in
1640: 20 73 65 71 75 65 6e 63 65 2c 0a 61 6e 64 20 74   sequence,.and t
1650: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
1660: 6c 61 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  last expression 
1670: 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 2f  is returned...</
1680: 70 3e 3c 70 3e 0a 41 6e 20 69 6e 70 75 74 20 76  p><p>.An input v
1690: 61 6c 75 65 20 6d 61 74 63 68 65 73 20 61 20 63  alue matches a c
16a0: 6c 61 75 73 65 20 69 66 20 69 74 20 66 69 74 73  lause if it fits
16b0: 20 74 68 65 20 63 6c 61 75 73 65 27 73 20 70 61   the clause's pa
16c0: 74 74 65 72 6e 20 61 6e 64 0a 70 61 73 73 65 73  ttern and.passes
16d0: 20 74 68 65 20 63 6c 61 75 73 65 27 73 20 67 75   the clause's gu
16e0: 61 72 64 73 2c 20 69 66 20 61 6e 79 2e 0a 50 61  ards, if any..Pa
16f0: 74 74 65 72 6e 73 20 6d 61 79 20 63 6f 6e 74 61  tterns may conta
1700: 69 6e 20 73 79 6d 62 6f 6c 69 63 20 63 6f 6e 73  in symbolic cons
1710: 74 61 6e 74 73 2c 20 77 68 69 63 68 20 6d 75 73  tants, which mus
1720: 74 20 6d 61 74 63 68 20 65 78 61 63 74 6c 79 2c  t match exactly,
1730: 20 61 6e 64 0a 70 61 74 74 65 72 6e 20 76 61 72   and.pattern var
1740: 69 61 62 6c 65 73 2c 20 77 68 69 63 68 20 6d 61  iables, which ma
1750: 74 63 68 20 61 6e 79 20 69 6e 70 75 74 2e 20 20  tch any input.  
1760: 0a 50 61 74 74 65 72 6e 20 76 61 72 69 61 62 6c  .Pattern variabl
1770: 65 73 20 61 72 65 20 70 72 65 66 69 78 65 64 20  es are prefixed 
1780: 62 79 20 63 6f 6d 6d 61 73 3b 20 73 79 6d 62 6f  by commas; symbo
1790: 6c 69 63 20 63 6f 6e 73 74 61 6e 74 73 20 61 72  lic constants ar
17a0: 65 20 6e 6f 74 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a  e not...</p><p>.
17b0: 0a 3c 2f 70 3e 3c 70 3e 3c 74 74 3e 28 6d 61 74  .</p><p><tt>(mat
17c0: 63 68 26 6e 62 73 70 3b 27 28 61 26 6e 62 73 70  ch&nbsp;'(a&nbsp
17d0: 3b 31 37 26 6e 62 73 70 3b 33 37 29 3c 62 72 3e  ;17&nbsp;37)<br>
17e0: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28  ..&nbsp;&nbsp;[(
17f0: 61 26 6e 62 73 70 3b 2c 78 29 26 6e 62 73 70 3b  a&nbsp;,x)&nbsp;
1800: 31 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e  1]<br>..&nbsp;&n
1810: 62 73 70 3b 5b 28 62 26 6e 62 73 70 3b 2c 78 26  bsp;[(b&nbsp;,x&
1820: 6e 62 73 70 3b 2c 79 29 26 6e 62 73 70 3b 32 5d  nbsp;,y)&nbsp;2]
1830: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
1840: 70 3b 5b 28 61 26 6e 62 73 70 3b 2c 78 26 6e 62  p;[(a&nbsp;,x&nb
1850: 73 70 3b 2c 79 29 26 6e 62 73 70 3b 33 5d 29 26  sp;,y)&nbsp;3])&
1860: 6e 62 73 70 3b 3c 69 6d 67 20 73 72 63 3d 22 6d  nbsp;<img src="m
1870: 61 74 63 68 5f 66 69 6c 65 73 2f 30 2e 67 69 66  atch_files/0.gif
1880: 22 20 61 6c 74 3d 22 26 6c 74 3b 67 72 61 70 68  " alt="&lt;graph
1890: 69 63 26 67 74 3b 22 3e 26 6e 62 73 70 3b 33 3c  ic&gt;">&nbsp;3<
18a0: 2f 74 74 3e 0a 3c 2f 70 3e 3c 70 3e 54 68 65 20  /tt>.</p><p>The 
18b0: 66 69 72 73 74 20 63 6c 61 75 73 65 20 66 61 69  first clause fai
18c0: 6c 73 20 74 6f 20 6d 61 74 63 68 20 62 65 63 61  ls to match beca
18d0: 75 73 65 20 74 68 65 72 65 20 61 72 65 20 74 68  use there are th
18e0: 72 65 65 20 69 74 65 6d 73 20 69 6e 20 74 68 65  ree items in the
18f0: 0a 69 6e 70 75 74 20 6c 69 73 74 2c 20 61 6e 64  .input list, and
1900: 20 74 68 65 20 70 61 74 74 65 72 6e 20 68 61 73   the pattern has
1910: 20 6f 6e 6c 79 20 74 77 6f 2e 0a 54 68 65 20 73   only two..The s
1920: 65 63 6f 6e 64 20 63 6c 61 75 73 65 20 66 61 69  econd clause fai
1930: 6c 73 20 62 65 63 61 75 73 65 20 3c 74 74 3e 62  ls because <tt>b
1940: 3c 2f 74 74 3e 20 64 6f 65 73 20 6e 6f 74 20 6d  </tt> does not m
1950: 61 74 63 68 20 3c 74 74 3e 61 3c 2f 74 74 3e 2e  atch <tt>a</tt>.
1960: 0a 0a 3c 2f 70 3e 3c 70 3e 0a 49 6e 20 74 68 65  ..</p><p>.In the
1970: 20 6f 75 74 70 75 74 20 65 78 70 72 65 73 73 69   output expressi
1980: 6f 6e 2c 20 74 68 65 20 76 61 6c 75 65 73 20 6f  on, the values o
1990: 66 20 74 68 65 20 70 61 74 74 65 72 6e 20 76 61  f the pattern va
19a0: 72 69 61 62 6c 65 73 20 61 72 65 0a 62 6f 75 6e  riables are.boun
19b0: 64 20 74 6f 20 74 68 65 20 63 6f 72 72 65 73 70  d to the corresp
19c0: 6f 6e 64 69 6e 67 20 70 69 65 63 65 73 20 6f 66  onding pieces of
19d0: 20 69 6e 70 75 74 2e 0a 0a 3c 2f 70 3e 3c 70 3e   input...</p><p>
19e0: 0a 0a 3c 2f 70 3e 3c 70 3e 3c 74 74 3e 28 6d 61  ..</p><p><tt>(ma
19f0: 74 63 68 26 6e 62 73 70 3b 27 28 61 26 6e 62 73  tch&nbsp;'(a&nbs
1a00: 70 3b 31 37 26 6e 62 73 70 3b 33 37 29 3c 62 72  p;17&nbsp;37)<br
1a10: 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b  >..&nbsp;&nbsp;[
1a20: 28 61 26 6e 62 73 70 3b 2c 78 29 26 6e 62 73 70  (a&nbsp;,x)&nbsp
1a30: 3b 28 2d 26 6e 62 73 70 3b 78 29 5d 3c 62 72 3e  ;(-&nbsp;x)]<br>
1a40: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28  ..&nbsp;&nbsp;[(
1a50: 62 26 6e 62 73 70 3b 2c 78 26 6e 62 73 70 3b 2c  b&nbsp;,x&nbsp;,
1a60: 79 29 26 6e 62 73 70 3b 28 2b 26 6e 62 73 70 3b  y)&nbsp;(+&nbsp;
1a70: 78 26 6e 62 73 70 3b 79 29 5d 3c 62 72 3e 0a 0a  x&nbsp;y)]<br>..
1a80: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28 61 26  &nbsp;&nbsp;[(a&
1a90: 6e 62 73 70 3b 2c 78 26 6e 62 73 70 3b 2c 79 29  nbsp;,x&nbsp;,y)
1aa0: 26 6e 62 73 70 3b 28 2a 26 6e 62 73 70 3b 78 26  &nbsp;(*&nbsp;x&
1ab0: 6e 62 73 70 3b 79 29 5d 29 26 6e 62 73 70 3b 3c  nbsp;y)])&nbsp;<
1ac0: 69 6d 67 20 73 72 63 3d 22 6d 61 74 63 68 5f 66  img src="match_f
1ad0: 69 6c 65 73 2f 30 2e 67 69 66 22 20 61 6c 74 3d  iles/0.gif" alt=
1ae0: 22 26 6c 74 3b 67 72 61 70 68 69 63 26 67 74 3b  "&lt;graphic&gt;
1af0: 22 3e 26 6e 62 73 70 3b 36 32 39 3c 2f 74 74 3e  ">&nbsp;629</tt>
1b00: 0a 3c 2f 70 3e 3c 70 3e 57 68 65 6e 20 66 6f 6c  .</p><p>When fol
1b10: 6c 6f 77 65 64 20 62 79 20 61 6e 20 65 6c 6c 69  lowed by an elli
1b20: 70 73 69 73 20 28 3c 74 74 3e 2e 2e 2e 3c 2f 74  psis (<tt>...</t
1b30: 74 3e 29 2c 20 61 20 70 61 74 74 65 72 6e 20 76  t>), a pattern v
1b40: 61 72 69 61 62 6c 65 0a 72 65 70 72 65 73 65 6e  ariable.represen
1b50: 74 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  ts a sequence of
1b60: 20 69 6e 70 75 74 20 76 61 6c 75 65 73 2e 0a 0a   input values...
1b70: 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c 70 3e  </p><p>..</p><p>
1b80: 3c 74 74 3e 28 6d 61 74 63 68 26 6e 62 73 70 3b  <tt>(match&nbsp;
1b90: 27 28 61 26 6e 62 73 70 3b 31 37 26 6e 62 73 70  '(a&nbsp;17&nbsp
1ba0: 3b 33 37 29 26 6e 62 73 70 3b 5b 28 61 26 6e 62  ;37)&nbsp;[(a&nb
1bb0: 73 70 3b 2c 78 2a 26 6e 62 73 70 3b 2e 2e 2e 29  sp;,x*&nbsp;...)
1bc0: 26 6e 62 73 70 3b 78 2a 5d 29 26 6e 62 73 70 3b  &nbsp;x*])&nbsp;
1bd0: 3c 69 6d 67 20 73 72 63 3d 22 6d 61 74 63 68 5f  <img src="match_
1be0: 66 69 6c 65 73 2f 30 2e 67 69 66 22 20 61 6c 74  files/0.gif" alt
1bf0: 3d 22 26 6c 74 3b 67 72 61 70 68 69 63 26 67 74  ="&lt;graphic&gt
1c00: 3b 22 3e 26 6e 62 73 70 3b 28 31 37 26 6e 62 73  ;">&nbsp;(17&nbs
1c10: 70 3b 33 37 29 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c  p;37)</tt>.</p><
1c20: 70 3e 42 79 20 63 6f 6e 76 65 6e 74 69 6f 6e 2c  p>By convention,
1c30: 20 77 65 20 70 6c 61 63 65 20 61 20 3c 74 74 3e   we place a <tt>
1c40: 2a 3c 2f 74 74 3e 20 73 75 66 66 69 78 20 6f 6e  *</tt> suffix on
1c50: 20 65 61 63 68 20 70 61 74 74 65 72 6e 20 76 61   each pattern va
1c60: 72 69 61 62 6c 65 0a 74 68 61 74 20 6d 61 74 63  riable.that matc
1c70: 68 65 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f  hes a sequence o
1c80: 66 20 69 6e 70 75 74 20 65 78 70 72 65 73 73 69  f input expressi
1c90: 6f 6e 73 2e 0a 54 68 69 73 20 69 73 20 6a 75 73  ons..This is jus
1ca0: 74 20 61 20 63 6f 6e 76 65 6e 74 69 6f 6e 2c 20  t a convention, 
1cb0: 68 6f 77 65 76 65 72 2c 20 61 6e 64 20 6e 6f 74  however, and not
1cc0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 79 6e   part of the syn
1cd0: 74 61 78 20 6f 66 0a 3c 74 74 3e 6d 61 74 63 68  tax of.<tt>match
1ce0: 3c 2f 74 74 3e 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a  </tt>...</p><p>.
1cf0: 45 6c 6c 69 70 73 65 73 20 63 61 6e 20 66 6f 6c  Ellipses can fol
1d00: 6c 6f 77 20 61 20 73 74 72 75 63 74 75 72 65 64  low a structured
1d10: 20 70 61 74 74 65 72 6e 20 63 6f 6e 74 61 69 6e   pattern contain
1d20: 69 6e 67 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a  ing one or more.
1d30: 70 61 74 74 65 72 6e 20 76 61 72 69 61 62 6c 65  pattern variable
1d40: 73 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70  s...</p><p>..</p
1d50: 3e 3c 70 3e 3c 74 74 3e 28 6d 61 74 63 68 26 6e  ><p><tt>(match&n
1d60: 62 73 70 3b 27 28 73 61 79 26 6e 62 73 70 3b 28  bsp;'(say&nbsp;(
1d70: 61 26 6e 62 73 70 3b 74 69 6d 65 29 26 6e 62 73  a&nbsp;time)&nbs
1d80: 70 3b 28 73 74 69 74 63 68 26 6e 62 73 70 3b 73  p;(stitch&nbsp;s
1d90: 61 76 65 73 29 26 6e 62 73 70 3b 28 69 6e 26 6e  aves)&nbsp;(in&n
1da0: 62 73 70 3b 6e 69 6e 65 29 29 3c 62 72 3e 0a 0a  bsp;nine))<br>..
1db0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28 73 61  &nbsp;&nbsp;[(sa
1dc0: 79 26 6e 62 73 70 3b 28 2c 78 2a 26 6e 62 73 70  y&nbsp;(,x*&nbsp
1dd0: 3b 2c 79 2a 29 26 6e 62 73 70 3b 2e 2e 2e 29 26  ;,y*)&nbsp;...)&
1de0: 6e 62 73 70 3b 28 61 70 70 65 6e 64 26 6e 62 73  nbsp;(append&nbs
1df0: 70 3b 78 2a 26 6e 62 73 70 3b 79 2a 29 5d 29 26  p;x*&nbsp;y*)])&
1e00: 6e 62 73 70 3b 3c 69 6d 67 20 73 72 63 3d 22 6d  nbsp;<img src="m
1e10: 61 74 63 68 5f 66 69 6c 65 73 2f 30 2e 67 69 66  atch_files/0.gif
1e20: 22 20 61 6c 74 3d 22 26 6c 74 3b 67 72 61 70 68  " alt="&lt;graph
1e30: 69 63 26 67 74 3b 22 3e 26 6e 62 73 70 3b 28 61  ic&gt;">&nbsp;(a
1e40: 26 6e 62 73 70 3b 73 74 69 74 63 68 26 6e 62 73  &nbsp;stitch&nbs
1e50: 70 3b 69 6e 26 6e 62 73 70 3b 74 69 6d 65 26 6e  p;in&nbsp;time&n
1e60: 62 73 70 3b 73 61 76 65 73 26 6e 62 73 70 3b 6e  bsp;saves&nbsp;n
1e70: 69 6e 65 29 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c 70  ine)</tt>.</p><p
1e80: 3e 45 6c 6c 69 70 73 65 73 20 63 61 6e 20 62 65  >Ellipses can be
1e90: 20 6e 65 73 74 65 64 2c 20 70 72 6f 64 75 63 69   nested, produci
1ea0: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6f 66 20  ng sequences of 
1eb0: 73 65 71 75 65 6e 63 65 73 20 6f 66 20 76 61 6c  sequences of val
1ec0: 75 65 73 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c  ues...</p><p>..<
1ed0: 2f 70 3e 3c 70 3e 3c 74 74 3e 28 6d 61 74 63 68  /p><p><tt>(match
1ee0: 26 6e 62 73 70 3b 27 28 28 61 26 6e 62 73 70 3b  &nbsp;'((a&nbsp;
1ef0: 62 26 6e 62 73 70 3b 63 26 6e 62 73 70 3b 64 29  b&nbsp;c&nbsp;d)
1f00: 26 6e 62 73 70 3b 28 65 26 6e 62 73 70 3b 66 26  &nbsp;(e&nbsp;f&
1f10: 6e 62 73 70 3b 67 29 26 6e 62 73 70 3b 28 68 26  nbsp;g)&nbsp;(h&
1f20: 6e 62 73 70 3b 69 29 26 6e 62 73 70 3b 28 6a 29  nbsp;i)&nbsp;(j)
1f30: 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  )<br>..&nbsp;&nb
1f40: 73 70 3b 5b 28 28 2c 78 2a 26 6e 62 73 70 3b 2c  sp;[((,x*&nbsp;,
1f50: 79 2a 2a 26 6e 62 73 70 3b 2e 2e 2e 29 26 6e 62  y**&nbsp;...)&nb
1f60: 73 70 3b 2e 2e 2e 29 3c 62 72 3e 0a 0a 26 6e 62  sp;...)<br>..&nb
1f70: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28  sp;&nbsp;&nbsp;(
1f80: 6c 69 73 74 26 6e 62 73 70 3b 78 2a 26 6e 62 73  list&nbsp;x*&nbs
1f90: 70 3b 79 2a 2a 29 5d 29 26 6e 62 73 70 3b 3c 69  p;y**)])&nbsp;<i
1fa0: 6d 67 20 73 72 63 3d 22 6d 61 74 63 68 5f 66 69  mg src="match_fi
1fb0: 6c 65 73 2f 30 2e 67 69 66 22 20 61 6c 74 3d 22  les/0.gif" alt="
1fc0: 26 6c 74 3b 67 72 61 70 68 69 63 26 67 74 3b 22  &lt;graphic&gt;"
1fd0: 3e 26 6e 62 73 70 3b 28 28 61 26 6e 62 73 70 3b  >&nbsp;((a&nbsp;
1fe0: 65 26 6e 62 73 70 3b 68 26 6e 62 73 70 3b 6a 29  e&nbsp;h&nbsp;j)
1ff0: 26 6e 62 73 70 3b 28 28 62 26 6e 62 73 70 3b 63  &nbsp;((b&nbsp;c
2000: 26 6e 62 73 70 3b 64 29 26 6e 62 73 70 3b 28 66  &nbsp;d)&nbsp;(f
2010: 26 6e 62 73 70 3b 67 29 26 6e 62 73 70 3b 28 69  &nbsp;g)&nbsp;(i
2020: 29 26 6e 62 73 70 3b 28 29 29 29 3c 2f 74 74 3e  )&nbsp;()))</tt>
2030: 0a 3c 2f 70 3e 3c 70 3e 52 65 63 75 72 73 69 6f  .</p><p>Recursio
2040: 6e 20 69 73 20 66 72 65 71 75 65 6e 74 6c 79 20  n is frequently 
2050: 72 65 71 75 69 72 65 64 20 77 68 69 6c 65 20 70  required while p
2060: 72 6f 63 65 73 73 69 6e 67 20 61 6e 20 69 6e 70  rocessing an inp
2070: 75 74 20 65 78 70 72 65 73 73 69 6f 6e 0a 77 69  ut expression.wi
2080: 74 68 20 3c 74 74 3e 6d 61 74 63 68 3c 2f 74 74  th <tt>match</tt
2090: 3e 2e 0a 48 65 72 65 20 69 73 20 61 20 73 69 6d  >..Here is a sim
20a0: 70 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ple definition o
20b0: 66 20 3c 74 74 3e 6c 65 6e 67 74 68 3c 2f 74 74  f <tt>length</tt
20c0: 3e 20 75 73 69 6e 67 20 3c 74 74 3e 6d 61 74 63  > using <tt>matc
20d0: 68 3c 2f 74 74 3e 2e 0a 0a 3c 2f 70 3e 3c 70 3e  h</tt>...</p><p>
20e0: 0a 0a 3c 2f 70 3e 3c 70 3e 3c 74 74 3e 28 64 65  ..</p><p><tt>(de
20f0: 66 69 6e 65 26 6e 62 73 70 3b 6c 65 6e 67 74 68  fine&nbsp;length
2100: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
2110: 70 3b 28 6c 61 6d 62 64 61 26 6e 62 73 70 3b 28  p;(lambda&nbsp;(
2120: 6c 73 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26  ls)<br>..&nbsp;&
2130: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
2140: 3b 28 6d 61 74 63 68 26 6e 62 73 70 3b 6c 73 3c  ;(match&nbsp;ls<
2150: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
2160: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
2170: 73 70 3b 26 6e 62 73 70 3b 5b 28 29 26 6e 62 73  sp;&nbsp;[()&nbs
2180: 70 3b 30 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b  p;0]<br>..&nbsp;
2190: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
21a0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28  p;&nbsp;&nbsp;[(
21b0: 2c 78 26 6e 62 73 70 3b 2e 26 6e 62 73 70 3b 2c  ,x&nbsp;.&nbsp;,
21c0: 78 2a 29 26 6e 62 73 70 3b 28 61 64 64 31 26 6e  x*)&nbsp;(add1&n
21d0: 62 73 70 3b 28 6c 65 6e 67 74 68 26 6e 62 73 70  bsp;(length&nbsp
21e0: 3b 78 2a 29 29 5d 29 29 29 3c 2f 74 74 3e 0a 3c  ;x*))])))</tt>.<
21f0: 2f 70 3e 3c 70 3e 55 73 69 6e 67 20 65 6c 6c 69  /p><p>Using elli
2200: 70 73 65 73 20 6d 61 79 20 6d 61 6b 65 20 74 68  pses may make th
2210: 69 73 20 6d 6f 72 65 20 63 6c 65 61 72 2e 0a 0a  is more clear...
2220: 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c 70 3e  </p><p>..</p><p>
2230: 3c 74 74 3e 28 64 65 66 69 6e 65 26 6e 62 73 70  <tt>(define&nbsp
2240: 3b 6c 65 6e 67 74 68 3c 62 72 3e 0a 0a 26 6e 62  ;length<br>..&nb
2250: 73 70 3b 26 6e 62 73 70 3b 28 6c 61 6d 62 64 61  sp;&nbsp;(lambda
2260: 26 6e 62 73 70 3b 28 6c 73 29 3c 62 72 3e 0a 0a  &nbsp;(ls)<br>..
2270: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
2280: 70 3b 26 6e 62 73 70 3b 28 6d 61 74 63 68 26 6e  p;&nbsp;(match&n
2290: 62 73 70 3b 6c 73 3c 62 72 3e 0a 0a 26 6e 62 73  bsp;ls<br>..&nbs
22a0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
22b0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
22c0: 5b 28 29 26 6e 62 73 70 3b 30 5d 3c 62 72 3e 0a  [()&nbsp;0]<br>.
22d0: 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  .&nbsp;&nbsp;&nb
22e0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
22f0: 6e 62 73 70 3b 5b 28 2c 78 26 6e 62 73 70 3b 2c  nbsp;[(,x&nbsp;,
2300: 78 2a 26 6e 62 73 70 3b 2e 2e 2e 29 26 6e 62 73  x*&nbsp;...)&nbs
2310: 70 3b 28 61 64 64 31 26 6e 62 73 70 3b 28 6c 65  p;(add1&nbsp;(le
2320: 6e 67 74 68 26 6e 62 73 70 3b 78 2a 29 29 5d 29  ngth&nbsp;x*))])
2330: 29 29 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c 70 3e 48  ))</tt>.</p><p>H
2340: 65 72 65 20 69 73 20 61 20 6d 6f 72 65 20 72 65  ere is a more re
2350: 61 6c 69 73 74 69 63 20 65 78 61 6d 70 6c 65 20  alistic example 
2360: 6f 66 20 72 65 63 75 72 73 69 6f 6e 2e 0a 49 74  of recursion..It
2370: 20 61 6c 73 6f 20 69 6c 6c 75 73 74 72 61 74 65   also illustrate
2380: 73 20 74 68 65 20 75 73 65 20 6f 66 20 67 75 61  s the use of gua
2390: 72 64 73 20 61 6e 64 20 74 68 65 20 75 73 65 20  rds and the use 
23a0: 6f 66 0a 3c 74 74 3e 65 72 72 6f 72 3c 2f 74 74  of.<tt>error</tt
23b0: 3e 20 74 6f 20 73 69 67 6e 61 6c 20 6d 61 74 63  > to signal matc
23c0: 68 20 65 72 72 6f 72 73 2e 0a 0a 3c 2f 70 3e 3c  h errors...</p><
23d0: 70 3e 0a 0a 3c 2f 70 3e 3c 70 3e 3c 74 74 3e 28  p>..</p><p><tt>(
23e0: 64 65 66 69 6e 65 26 6e 62 73 70 3b 73 69 6d 70  define&nbsp;simp
23f0: 6c 65 2d 65 76 61 6c 3c 62 72 3e 0a 0a 26 6e 62  le-eval<br>..&nb
2400: 73 70 3b 26 6e 62 73 70 3b 28 6c 61 6d 62 64 61  sp;&nbsp;(lambda
2410: 26 6e 62 73 70 3b 28 78 29 3c 62 72 3e 0a 0a 26  &nbsp;(x)<br>..&
2420: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
2430: 3b 26 6e 62 73 70 3b 28 6d 61 74 63 68 26 6e 62  ;&nbsp;(match&nb
2440: 73 70 3b 78 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b  sp;x<br>..&nbsp;
2450: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
2460: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 2c  p;&nbsp;&nbsp;[,
2470: 69 26 6e 62 73 70 3b 28 67 75 61 72 64 26 6e 62  i&nbsp;(guard&nb
2480: 73 70 3b 28 69 6e 74 65 67 65 72 3f 26 6e 62 73  sp;(integer?&nbs
2490: 70 3b 69 29 29 26 6e 62 73 70 3b 69 5d 3c 62 72  p;i))&nbsp;i]<br
24a0: 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  >..&nbsp;&nbsp;&
24b0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
24c0: 3b 26 6e 62 73 70 3b 5b 28 2b 26 6e 62 73 70 3b  ;&nbsp;[(+&nbsp;
24d0: 2c 78 2a 26 6e 62 73 70 3b 2e 2e 2e 29 26 6e 62  ,x*&nbsp;...)&nb
24e0: 73 70 3b 28 61 70 70 6c 79 26 6e 62 73 70 3b 2b  sp;(apply&nbsp;+
24f0: 26 6e 62 73 70 3b 28 6d 61 70 26 6e 62 73 70 3b  &nbsp;(map&nbsp;
2500: 73 69 6d 70 6c 65 2d 65 76 61 6c 26 6e 62 73 70  simple-eval&nbsp
2510: 3b 78 2a 29 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73  ;x*))]<br>..&nbs
2520: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
2530: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
2540: 5b 28 2a 26 6e 62 73 70 3b 2c 78 2a 26 6e 62 73  [(*&nbsp;,x*&nbs
2550: 70 3b 2e 2e 2e 29 26 6e 62 73 70 3b 28 61 70 70  p;...)&nbsp;(app
2560: 6c 79 26 6e 62 73 70 3b 2a 26 6e 62 73 70 3b 28  ly&nbsp;*&nbsp;(
2570: 6d 61 70 26 6e 62 73 70 3b 73 69 6d 70 6c 65 2d  map&nbsp;simple-
2580: 65 76 61 6c 26 6e 62 73 70 3b 78 2a 29 29 5d 3c  eval&nbsp;x*))]<
2590: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
25a0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
25b0: 73 70 3b 26 6e 62 73 70 3b 5b 28 2d 26 6e 62 73  sp;&nbsp;[(-&nbs
25c0: 70 3b 2c 78 26 6e 62 73 70 3b 2c 79 29 26 6e 62  p;,x&nbsp;,y)&nb
25d0: 73 70 3b 28 2d 26 6e 62 73 70 3b 28 73 69 6d 70  sp;(-&nbsp;(simp
25e0: 6c 65 2d 65 76 61 6c 26 6e 62 73 70 3b 78 29 26  le-eval&nbsp;x)&
25f0: 6e 62 73 70 3b 28 73 69 6d 70 6c 65 2d 65 76 61  nbsp;(simple-eva
2600: 6c 26 6e 62 73 70 3b 79 29 29 5d 3c 62 72 3e 0a  l&nbsp;y))]<br>.
2610: 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  .&nbsp;&nbsp;&nb
2620: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
2630: 6e 62 73 70 3b 5b 28 2f 26 6e 62 73 70 3b 2c 78  nbsp;[(/&nbsp;,x
2640: 26 6e 62 73 70 3b 2c 79 29 26 6e 62 73 70 3b 28  &nbsp;,y)&nbsp;(
2650: 2f 26 6e 62 73 70 3b 28 73 69 6d 70 6c 65 2d 65  /&nbsp;(simple-e
2660: 76 61 6c 26 6e 62 73 70 3b 78 29 26 6e 62 73 70  val&nbsp;x)&nbsp
2670: 3b 28 73 69 6d 70 6c 65 2d 65 76 61 6c 26 6e 62  ;(simple-eval&nb
2680: 73 70 3b 79 29 29 5d 3c 62 72 3e 0a 0a 26 6e 62  sp;y))]<br>..&nb
2690: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
26a0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
26b0: 3b 5b 2c 78 26 6e 62 73 70 3b 28 65 72 72 6f 72  ;[,x&nbsp;(error
26c0: 26 6e 62 73 70 3b 27 73 69 6d 70 6c 65 2d 65 76  &nbsp;'simple-ev
26d0: 61 6c 26 6e 62 73 70 3b 22 69 6e 76 61 6c 69 64  al&nbsp;"invalid
26e0: 26 6e 62 73 70 3b 65 78 70 72 65 73 73 69 6f 6e  &nbsp;expression
26f0: 26 6e 62 73 70 3b 7e 73 22 26 6e 62 73 70 3b 78  &nbsp;~s"&nbsp;x
2700: 29 5d 29 29 29 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c  )])))</tt>.</p><
2710: 70 3e 54 72 79 20 6f 75 74 20 3c 74 74 3e 73 69  p>Try out <tt>si
2720: 6d 70 6c 65 2d 65 76 61 6c 3c 2f 74 74 3e 20 75  mple-eval</tt> u
2730: 73 69 6e 67 20 43 68 65 7a 20 53 63 68 65 6d 65  sing Chez Scheme
2740: 27 73 20 3c 74 74 3e 6e 65 77 2d 63 61 66 65 3c  's <tt>new-cafe<
2750: 2f 74 74 3e 0a 77 69 74 68 20 3c 74 74 3e 73 69  /tt>.with <tt>si
2760: 6d 70 6c 65 2d 65 76 61 6c 3c 2f 74 74 3e 20 61  mple-eval</tt> a
2770: 73 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e  s the evaluation
2780: 20 70 72 6f 63 65 64 75 72 65 3a 0a 0a 3c 2f 70   procedure:..</p
2790: 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c 70 3e 3c 74 74  ><p>..</p><p><tt
27a0: 3e 26 67 74 3b 26 6e 62 73 70 3b 28 6e 65 77 2d  >&gt;&nbsp;(new-
27b0: 63 61 66 65 26 6e 62 73 70 3b 73 69 6d 70 6c 65  cafe&nbsp;simple
27c0: 2d 65 76 61 6c 29 3c 62 72 3e 0a 0a 26 67 74 3b  -eval)<br>..&gt;
27d0: 26 67 74 3b 26 6e 62 73 70 3b 28 2b 26 6e 62 73  &gt;&nbsp;(+&nbs
27e0: 70 3b 31 26 6e 62 73 70 3b 32 26 6e 62 73 70 3b  p;1&nbsp;2&nbsp;
27f0: 33 29 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  3)&nbsp;&nbsp;&n
2800: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
2810: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 3c 62 72 3e  &nbsp;&nbsp;<br>
2820: 0a 0a 36 3c 62 72 3e 0a 0a 26 67 74 3b 26 67 74  ..6<br>..&gt;&gt
2830: 3b 26 6e 62 73 70 3b 28 2b 26 6e 62 73 70 3b 28  ;&nbsp;(+&nbsp;(
2840: 2d 26 6e 62 73 70 3b 30 26 6e 62 73 70 3b 31 29  -&nbsp;0&nbsp;1)
2850: 26 6e 62 73 70 3b 28 2b 26 6e 62 73 70 3b 32 26  &nbsp;(+&nbsp;2&
2860: 6e 62 73 70 3b 33 29 29 3c 62 72 3e 0a 0a 34 3c  nbsp;3))<br>..4<
2870: 62 72 3e 0a 0a 26 67 74 3b 26 67 74 3b 26 6e 62  br>..&gt;&gt;&nb
2880: 73 70 3b 28 2d 26 6e 62 73 70 3b 31 26 6e 62 73  sp;(-&nbsp;1&nbs
2890: 70 3b 32 26 6e 62 73 70 3b 33 29 0a 3c 62 72 3e  p;2&nbsp;3).<br>
28a0: 0a 3c 62 72 3e 0a 45 72 72 6f 72 26 6e 62 73 70  .<br>.Error&nbsp
28b0: 3b 69 6e 26 6e 62 73 70 3b 73 69 6d 70 6c 65 2d  ;in&nbsp;simple-
28c0: 65 76 61 6c 3a 26 6e 62 73 70 3b 69 6e 76 61 6c  eval:&nbsp;inval
28d0: 69 64 26 6e 62 73 70 3b 65 78 70 72 65 73 73 69  id&nbsp;expressi
28e0: 6f 6e 26 6e 62 73 70 3b 28 2d 26 6e 62 73 70 3b  on&nbsp;(-&nbsp;
28f0: 31 26 6e 62 73 70 3b 32 26 6e 62 73 70 3b 33 29  1&nbsp;2&nbsp;3)
2900: 2e 3c 62 72 3e 0a 0a 54 79 70 65 26 6e 62 73 70  .<br>..Type&nbsp
2910: 3b 28 64 65 62 75 67 29 26 6e 62 73 70 3b 74 6f  ;(debug)&nbsp;to
2920: 26 6e 62 73 70 3b 65 6e 74 65 72 26 6e 62 73 70  &nbsp;enter&nbsp
2930: 3b 74 68 65 26 6e 62 73 70 3b 64 65 62 75 67 67  ;the&nbsp;debugg
2940: 65 72 2e 3c 62 72 3e 0a 0a 26 67 74 3b 26 67 74  er.<br>..&gt;&gt
2950: 3b 26 6e 62 73 70 3b 3c 2f 74 74 3e 0a 3c 2f 70  ;&nbsp;</tt>.</p
2960: 3e 3c 70 3e 55 6e 6c 69 6b 65 20 3c 74 74 3e 63  ><p>Unlike <tt>c
2970: 61 73 65 3c 2f 74 74 3e 20 61 6e 64 20 3c 74 74  ase</tt> and <tt
2980: 3e 63 6f 6e 64 3c 2f 74 74 3e 2c 20 3c 74 74 3e  >cond</tt>, <tt>
2990: 6d 61 74 63 68 3c 2f 74 74 3e 20 64 6f 65 73 20  match</tt> does 
29a0: 6e 6f 74 20 68 61 76 65 0a 61 6e 20 65 78 70 6c  not have.an expl
29b0: 69 63 69 74 20 3c 74 74 3e 65 6c 73 65 3c 2f 74  icit <tt>else</t
29c0: 74 3e 20 63 6c 61 75 73 65 2e 0a 49 6e 20 66 61  t> clause..In fa
29d0: 63 74 2c 20 69 66 20 61 20 63 6c 61 75 73 65 20  ct, if a clause 
29e0: 6f 66 20 74 68 65 20 66 6f 72 6d 0a 0a 3c 2f 70  of the form..</p
29f0: 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c 70 3e 3c 74 74  ><p>..</p><p><tt
2a00: 3e 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 65 6c  >&nbsp;&nbsp;[el
2a10: 73 65 26 6e 62 73 70 3b 3c 69 3e 65 78 70 72 3c  se&nbsp;<i>expr<
2a20: 2f 69 3e 5d 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c 70  /i>]</tt>.</p><p
2a30: 3e 69 73 20 75 73 65 64 2c 20 69 74 20 6d 61 74  >is used, it mat
2a40: 63 68 65 73 20 28 6f 6e 6c 79 29 20 74 68 65 20  ches (only) the 
2a50: 73 79 6d 62 6f 6c 20 3c 74 74 3e 65 6c 73 65 3c  symbol <tt>else<
2a60: 2f 74 74 3e 2e 0a 54 6f 20 61 63 68 69 65 76 65  /tt>..To achieve
2a70: 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 61   the effect of a
2a80: 20 63 61 74 63 68 2d 61 6c 6c 20 63 6c 61 75 73   catch-all claus
2a90: 65 2c 20 3c 74 74 3e 73 69 6d 70 6c 65 2d 65 76  e, <tt>simple-ev
2aa0: 61 6c 3c 2f 74 74 3e 0a 75 73 65 73 20 74 68 65  al</tt>.uses the
2ab0: 20 70 61 74 74 65 72 6e 20 3c 74 74 3e 2c 78 3c   pattern <tt>,x<
2ac0: 2f 74 74 3e 20 77 68 69 63 68 20 6d 61 74 63 68  /tt> which match
2ad0: 65 73 20 61 6e 79 20 69 6e 70 75 74 2e 0a 0a 3c  es any input...<
2ae0: 2f 70 3e 3c 70 3e 0a 41 6e 20 65 76 65 6e 20 73  /p><p>.An even s
2af0: 69 6d 70 6c 65 72 20 76 65 72 73 69 6f 6e 20 6f  impler version o
2b00: 66 20 74 68 65 20 61 62 6f 76 65 20 75 73 65 73  f the above uses
2b10: 20 3c 74 74 3e 6d 61 74 63 68 3c 2f 74 74 3e 27   <tt>match</tt>'
2b20: 73 0a 22 63 61 74 61 6d 6f 72 70 68 69 73 6d 22  s."catamorphism"
2b30: 20 66 65 61 74 75 72 65 20 74 6f 20 70 65 72 66   feature to perf
2b40: 6f 72 6d 20 74 68 65 20 72 65 63 75 72 73 69 6f  orm the recursio
2b50: 6e 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  n.automatically.
2b60: 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c  ..</p><p>..</p><
2b70: 70 3e 3c 74 74 3e 28 64 65 66 69 6e 65 26 6e 62  p><tt>(define&nb
2b80: 73 70 3b 73 69 6d 70 6c 65 2d 65 76 61 6c 3c 62  sp;simple-eval<b
2b90: 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b  r>..&nbsp;&nbsp;
2ba0: 28 6c 61 6d 62 64 61 26 6e 62 73 70 3b 28 78 29  (lambda&nbsp;(x)
2bb0: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
2bc0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28 6d  p;&nbsp;&nbsp;(m
2bd0: 61 74 63 68 26 6e 62 73 70 3b 78 3c 62 72 3e 0a  atch&nbsp;x<br>.
2be0: 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  .&nbsp;&nbsp;&nb
2bf0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
2c00: 6e 62 73 70 3b 5b 2c 69 26 6e 62 73 70 3b 28 67  nbsp;[,i&nbsp;(g
2c10: 75 61 72 64 26 6e 62 73 70 3b 28 69 6e 74 65 67  uard&nbsp;(integ
2c20: 65 72 3f 26 6e 62 73 70 3b 69 29 29 26 6e 62 73  er?&nbsp;i))&nbs
2c30: 70 3b 69 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b  p;i]<br>..&nbsp;
2c40: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
2c50: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28  p;&nbsp;&nbsp;[(
2c60: 2b 26 6e 62 73 70 3b 2c 5b 78 2a 5d 26 6e 62 73  +&nbsp;,[x*]&nbs
2c70: 70 3b 2e 2e 2e 29 26 6e 62 73 70 3b 28 61 70 70  p;...)&nbsp;(app
2c80: 6c 79 26 6e 62 73 70 3b 2b 26 6e 62 73 70 3b 78  ly&nbsp;+&nbsp;x
2c90: 2a 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26  *)]<br>..&nbsp;&
2ca0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
2cb0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28 2a  ;&nbsp;&nbsp;[(*
2cc0: 26 6e 62 73 70 3b 2c 5b 78 2a 5d 26 6e 62 73 70  &nbsp;,[x*]&nbsp
2cd0: 3b 2e 2e 2e 29 26 6e 62 73 70 3b 28 61 70 70 6c  ;...)&nbsp;(appl
2ce0: 79 26 6e 62 73 70 3b 2a 26 6e 62 73 70 3b 78 2a  y&nbsp;*&nbsp;x*
2cf0: 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e  )]<br>..&nbsp;&n
2d00: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
2d10: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28 2d 26  &nbsp;&nbsp;[(-&
2d20: 6e 62 73 70 3b 2c 5b 78 5d 26 6e 62 73 70 3b 2c  nbsp;,[x]&nbsp;,
2d30: 5b 79 5d 29 26 6e 62 73 70 3b 28 2d 26 6e 62 73  [y])&nbsp;(-&nbs
2d40: 70 3b 78 26 6e 62 73 70 3b 79 29 5d 3c 62 72 3e  p;x&nbsp;y)]<br>
2d50: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  ..&nbsp;&nbsp;&n
2d60: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
2d70: 26 6e 62 73 70 3b 5b 28 2f 26 6e 62 73 70 3b 2c  &nbsp;[(/&nbsp;,
2d80: 5b 78 5d 26 6e 62 73 70 3b 2c 5b 79 5d 29 26 6e  [x]&nbsp;,[y])&n
2d90: 62 73 70 3b 28 2f 26 6e 62 73 70 3b 78 26 6e 62  bsp;(/&nbsp;x&nb
2da0: 73 70 3b 79 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73  sp;y)]<br>..&nbs
2db0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
2dc0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
2dd0: 5b 2c 78 26 6e 62 73 70 3b 28 65 72 72 6f 72 26  [,x&nbsp;(error&
2de0: 6e 62 73 70 3b 27 73 69 6d 70 6c 65 2d 65 76 61  nbsp;'simple-eva
2df0: 6c 26 6e 62 73 70 3b 22 69 6e 76 61 6c 69 64 26  l&nbsp;"invalid&
2e00: 6e 62 73 70 3b 65 78 70 72 65 73 73 69 6f 6e 26  nbsp;expression&
2e10: 6e 62 73 70 3b 7e 73 22 26 6e 62 73 70 3b 78 29  nbsp;~s"&nbsp;x)
2e20: 5d 29 29 29 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c 70  ])))</tt>.</p><p
2e30: 3e 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 76  >In the second v
2e40: 65 72 73 69 6f 6e 20 6f 66 20 3c 74 74 3e 73 69  ersion of <tt>si
2e50: 6d 70 6c 65 2d 65 76 61 6c 3c 2f 74 74 3e 2c 20  mple-eval</tt>, 
2e60: 74 68 65 20 65 78 70 6c 69 63 69 74 0a 72 65 63  the explicit.rec
2e70: 75 72 73 69 76 65 20 63 61 6c 6c 73 20 61 72 65  ursive calls are
2e80: 20 67 6f 6e 65 2e 0a 49 6e 73 74 65 61 64 2c 20   gone..Instead, 
2e90: 74 68 65 20 70 61 74 74 65 72 6e 20 76 61 72 69  the pattern vari
2ea0: 61 62 6c 65 73 20 68 61 76 65 20 62 65 65 6e 20  ables have been 
2eb0: 77 72 69 74 74 65 6e 20 61 73 0a 3c 74 74 3e 2c  written as.<tt>,
2ec0: 5b 3c 69 3e 76 61 72 3c 2f 69 3e 5d 3c 2f 74 74  [<i>var</i>]</tt
2ed0: 3e 3b 20 74 68 69 73 20 74 65 6c 6c 73 20 3c 74  >; this tells <t
2ee0: 74 3e 6d 61 74 63 68 3c 2f 74 74 3e 20 74 6f 20  t>match</tt> to 
2ef0: 72 65 63 75 72 20 6f 6e 20 74 68 65 0a 6d 61 74  recur on the.mat
2f00: 63 68 69 6e 67 20 73 75 62 70 61 72 74 20 6f 66  ching subpart of
2f10: 20 74 68 65 20 69 6e 70 75 74 20 62 65 66 6f 72   the input befor
2f20: 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  e evaluating the
2f30: 0a 6f 75 74 70 75 74 20 65 78 70 72 65 73 73 69  .output expressi
2f40: 6f 6e 73 20 6f 66 20 74 68 65 20 63 6c 61 75 73  ons of the claus
2f50: 65 2e 0a 50 61 72 65 6e 74 68 65 73 65 73 20 6d  e..Parentheses m
2f60: 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 70 6c  ay be used in pl
2f70: 61 63 65 20 6f 66 20 62 72 61 63 6b 65 74 73 2c  ace of brackets,
2f80: 20 69 2e 65 2e 2c 0a 3c 74 74 3e 2c 28 3c 69 3e   i.e.,.<tt>,(<i>
2f90: 76 61 72 3c 2f 69 3e 29 3c 2f 74 74 3e 3b 20 77  var</i>)</tt>; w
2fa0: 65 20 75 73 65 20 62 72 61 63 6b 65 74 73 20 66  e use brackets f
2fb0: 6f 72 20 72 65 61 64 61 62 69 6c 69 74 79 2e 0a  or readability..
2fc0: 0a 3c 2f 70 3e 3c 70 3e 0a 48 65 72 65 20 69 73  .</p><p>.Here is
2fd0: 20 61 6e 6f 74 68 65 72 20 64 65 66 69 6e 69 74   another definit
2fe0: 69 6f 6e 20 6f 66 20 3c 74 74 3e 6c 65 6e 67 74  ion of <tt>lengt
2ff0: 68 3c 2f 74 74 3e 2c 20 74 68 69 73 20 74 69 6d  h</tt>, this tim
3000: 65 20 75 73 69 6e 67 20 74 68 65 0a 63 61 74 61  e using the.cata
3010: 6d 6f 72 70 68 69 73 6d 20 66 65 61 74 75 72 65  morphism feature
3020: 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e  ...</p><p>..</p>
3030: 3c 70 3e 3c 74 74 3e 28 64 65 66 69 6e 65 26 6e  <p><tt>(define&n
3040: 62 73 70 3b 6c 65 6e 67 74 68 3c 62 72 3e 0a 0a  bsp;length<br>..
3050: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28 6c 61 6d  &nbsp;&nbsp;(lam
3060: 62 64 61 26 6e 62 73 70 3b 28 78 29 3c 62 72 3e  bda&nbsp;(x)<br>
3070: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  ..&nbsp;&nbsp;&n
3080: 62 73 70 3b 26 6e 62 73 70 3b 28 6d 61 74 63 68  bsp;&nbsp;(match
3090: 26 6e 62 73 70 3b 78 3c 62 72 3e 0a 0a 26 6e 62  &nbsp;x<br>..&nb
30a0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
30b0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
30c0: 3b 5b 28 29 26 6e 62 73 70 3b 30 5d 3c 62 72 3e  ;[()&nbsp;0]<br>
30d0: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  ..&nbsp;&nbsp;&n
30e0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
30f0: 26 6e 62 73 70 3b 5b 28 2c 78 26 6e 62 73 70 3b  &nbsp;[(,x&nbsp;
3100: 2e 26 6e 62 73 70 3b 2c 5b 79 5d 29 26 6e 62 73  .&nbsp;,[y])&nbs
3110: 70 3b 28 2b 26 6e 62 73 70 3b 79 26 6e 62 73 70  p;(+&nbsp;y&nbsp
3120: 3b 31 29 5d 29 29 29 3c 2f 74 74 3e 0a 3c 2f 70  ;1)])))</tt>.</p
3130: 3e 3c 70 3e 53 69 6e 63 65 20 77 65 20 75 73 75  ><p>Since we usu
3140: 61 6c 6c 79 20 75 73 65 20 3c 74 74 3e 6d 61 74  ally use <tt>mat
3150: 63 68 3c 2f 74 74 3e 20 74 6f 20 77 72 69 74 65  ch</tt> to write
3160: 20 74 72 61 6e 73 6c 61 74 6f 72 73 20 66 72 6f   translators fro
3170: 6d 20 6f 6e 65 0a 6c 61 6e 67 75 61 67 65 20 74  m one.language t
3180: 6f 20 61 6e 6f 74 68 65 72 2c 20 77 65 20 75 73  o another, we us
3190: 75 61 6c 6c 79 20 6e 65 65 64 20 74 6f 20 62 75  ually need to bu
31a0: 69 6c 64 20 61 6e 20 6f 75 74 70 75 74 20 65 78  ild an output ex
31b0: 70 72 65 73 73 69 6f 6e 2c 0a 72 61 74 68 65 72  pression,.rather
31c0: 20 74 68 61 6e 20 72 65 74 75 72 6e 20 61 6e 20   than return an 
31d0: 6f 75 74 70 75 74 20 76 61 6c 75 65 2e 0a 46 6f  output value..Fo
31e0: 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66  r example, the f
31f0: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 76 65 72 74  ollowing convert
3200: 73 20 3c 74 74 3e 6c 65 74 3c 2f 74 74 3e 20 65  s <tt>let</tt> e
3210: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 0a  xpressions into.
3220: 65 71 75 69 76 61 6c 65 6e 74 20 3c 74 74 3e 6c  equivalent <tt>l
3230: 61 6d 62 64 61 3c 2f 74 74 3e 20 61 70 70 6c 69  ambda</tt> appli
3240: 63 61 74 69 6f 6e 73 2e 0a 0a 3c 2f 70 3e 3c 70  cations...</p><p
3250: 3e 0a 0a 3c 2f 70 3e 3c 70 3e 3c 74 74 3e 28 64  >..</p><p><tt>(d
3260: 65 66 69 6e 65 26 6e 62 73 70 3b 74 72 61 6e 73  efine&nbsp;trans
3270: 6c 61 74 65 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b  late<br>..&nbsp;
3280: 26 6e 62 73 70 3b 28 6c 61 6d 62 64 61 26 6e 62  &nbsp;(lambda&nb
3290: 73 70 3b 28 78 29 3c 62 72 3e 0a 0a 26 6e 62 73  sp;(x)<br>..&nbs
32a0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
32b0: 62 73 70 3b 28 6d 61 74 63 68 26 6e 62 73 70 3b  bsp;(match&nbsp;
32c0: 78 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  x<br>..&nbsp;&nb
32d0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
32e0: 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28 6c 65 74  nbsp;&nbsp;[(let
32f0: 26 6e 62 73 70 3b 28 28 2c 76 61 72 2a 26 6e 62  &nbsp;((,var*&nb
3300: 73 70 3b 2c 65 78 70 72 2a 29 26 6e 62 73 70 3b  sp;,expr*)&nbsp;
3310: 2e 2e 2e 29 26 6e 62 73 70 3b 2c 62 6f 64 79 26  ...)&nbsp;,body&
3320: 6e 62 73 70 3b 2c 62 6f 64 79 2a 26 6e 62 73 70  nbsp;,body*&nbsp
3330: 3b 2e 2e 2e 29 3c 62 72 3e 0a 0a 26 6e 62 73 70  ;...)<br>..&nbsp
3340: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
3350: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
3360: 6e 62 73 70 3b 60 28 28 6c 61 6d 62 64 61 26 6e  nbsp;`((lambda&n
3370: 62 73 70 3b 2c 76 61 72 2a 26 6e 62 73 70 3b 2c  bsp;,var*&nbsp;,
3380: 62 6f 64 79 26 6e 62 73 70 3b 2c 40 62 6f 64 79  body&nbsp;,@body
3390: 2a 29 26 6e 62 73 70 3b 2c 40 65 78 70 72 2a 29  *)&nbsp;,@expr*)
33a0: 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  ]<br>..&nbsp;&nb
33b0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
33c0: 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 2c 78 26 6e  nbsp;&nbsp;[,x&n
33d0: 62 73 70 3b 28 65 72 72 6f 72 26 6e 62 73 70 3b  bsp;(error&nbsp;
33e0: 27 74 72 61 6e 73 6c 61 74 65 26 6e 62 73 70 3b  'translate&nbsp;
33f0: 22 69 6e 76 61 6c 69 64 26 6e 62 73 70 3b 65 78  "invalid&nbsp;ex
3400: 70 72 65 73 73 69 6f 6e 3a 26 6e 62 73 70 3b 7e  pression:&nbsp;~
3410: 73 22 26 6e 62 73 70 3b 78 29 5d 29 29 29 0a 3c  s"&nbsp;x)]))).<
3420: 62 72 3e 0a 3c 62 72 3e 0a 28 74 72 61 6e 73 6c  br>.<br>.(transl
3430: 61 74 65 26 6e 62 73 70 3b 27 28 6c 65 74 26 6e  ate&nbsp;'(let&n
3440: 62 73 70 3b 28 28 78 26 6e 62 73 70 3b 33 29 26  bsp;((x&nbsp;3)&
3450: 6e 62 73 70 3b 28 79 26 6e 62 73 70 3b 34 29 29  nbsp;(y&nbsp;4))
3460: 26 6e 62 73 70 3b 28 2b 26 6e 62 73 70 3b 78 26  &nbsp;(+&nbsp;x&
3470: 6e 62 73 70 3b 79 29 29 29 26 6e 62 73 70 3b 3c  nbsp;y)))&nbsp;<
3480: 69 6d 67 20 73 72 63 3d 22 6d 61 74 63 68 5f 66  img src="match_f
3490: 69 6c 65 73 2f 30 2e 67 69 66 22 20 61 6c 74 3d  iles/0.gif" alt=
34a0: 22 26 6c 74 3b 67 72 61 70 68 69 63 26 67 74 3b  "&lt;graphic&gt;
34b0: 22 3e 26 6e 62 73 70 3b 28 28 6c 61 6d 62 64 61  ">&nbsp;((lambda
34c0: 26 6e 62 73 70 3b 28 78 26 6e 62 73 70 3b 79 29  &nbsp;(x&nbsp;y)
34d0: 26 6e 62 73 70 3b 28 2b 26 6e 62 73 70 3b 78 26  &nbsp;(+&nbsp;x&
34e0: 6e 62 73 70 3b 79 29 29 26 6e 62 73 70 3b 33 26  nbsp;y))&nbsp;3&
34f0: 6e 62 73 70 3b 34 29 3c 2f 74 74 3e 0a 3c 2f 70  nbsp;4)</tt>.</p
3500: 3e 3c 70 3e 54 68 69 73 20 70 72 6f 63 65 64 75  ><p>This procedu
3510: 72 65 20 75 73 65 73 20 53 63 68 65 6d 65 27 73  re uses Scheme's
3520: 20 3c 74 74 3e 71 75 61 73 69 71 75 6f 74 65 3c   <tt>quasiquote<
3530: 2f 74 74 3e 20 28 62 61 63 6b 71 75 6f 74 65 29  /tt> (backquote)
3540: 2c 0a 3c 74 74 3e 75 6e 71 75 6f 74 65 3c 2f 74  ,.<tt>unquote</t
3550: 74 3e 20 28 63 6f 6d 6d 61 29 2c 20 61 6e 64 20  t> (comma), and 
3560: 3c 74 74 3e 75 6e 71 75 6f 74 65 2d 73 70 6c 69  <tt>unquote-spli
3570: 63 69 6e 67 3c 2f 74 74 3e 20 28 63 6f 6d 6d 61  cing</tt> (comma
3580: 2d 61 74 29 0a 74 6f 20 70 69 65 63 65 20 74 6f  -at).to piece to
3590: 67 65 74 68 65 72 20 74 68 65 20 6f 75 74 70 75  gether the outpu
35a0: 74 20 66 6f 72 6d 2e 0a 54 68 65 73 65 20 61 72  t form..These ar
35b0: 65 20 6e 6f 74 20 64 65 73 63 72 69 62 65 64 20  e not described 
35c0: 68 65 72 65 2c 20 62 75 74 20 61 72 65 20 64 65  here, but are de
35d0: 73 63 72 69 62 65 64 20 69 6e 0a 3c 61 20 63 6c  scribed in.<a cl
35e0: 61 73 73 3d 22 72 65 66 22 20 68 72 65 66 3d 22  ass="ref" href="
35f0: 68 74 74 70 3a 2f 2f 77 77 77 2e 73 63 68 65 6d  http://www.schem
3600: 65 2e 63 6f 6d 2f 74 73 70 6c 34 2f 6f 62 6a 65  e.com/tspl4/obje
3610: 63 74 73 2e 68 74 6d 6c 23 53 45 43 54 51 55 4f  cts.html#SECTQUO
3620: 54 49 4e 47 22 3e 3c 69 3e 54 68 65 0a 53 63 68  TING"><i>The.Sch
3630: 65 6d 65 20 50 72 6f 67 72 61 6d 6d 69 6e 67 20  eme Programming 
3640: 4c 61 6e 67 75 61 67 65 3c 2f 69 3e 3c 2f 61 3e  Language</i></a>
3650: 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 4f 6e 65 20 75  ...</p><p>.One u
3660: 73 65 66 75 6c 20 66 65 61 74 75 72 65 20 6f 66  seful feature of
3670: 20 3c 74 74 3e 71 75 61 73 69 71 75 6f 74 65 3c   <tt>quasiquote<
3680: 2f 74 74 3e 20 6e 6f 74 20 64 65 73 63 72 69 62  /tt> not describ
3690: 65 64 20 69 6e 20 74 68 65 73 65 20 64 6f 63 75  ed in these docu
36a0: 6d 65 6e 74 73 0a 69 73 20 61 20 3c 74 74 3e 6d  ments.is a <tt>m
36b0: 61 74 63 68 3c 2f 74 74 3e 20 65 78 74 65 6e 73  atch</tt> extens
36c0: 69 6f 6e 20 74 68 61 74 20 61 6c 6c 6f 77 73 20  ion that allows 
36d0: 65 6c 6c 69 70 73 65 73 20 74 6f 20 62 65 20 75  ellipses to be u
36e0: 73 65 64 20 69 6e 20 70 6c 61 63 65 0a 6f 66 20  sed in place.of 
36f0: 3c 74 74 3e 75 6e 71 75 6f 74 65 2d 73 70 6c 69  <tt>unquote-spli
3700: 63 69 6e 67 3c 2f 74 74 3e 2c 20 77 68 69 63 68  cing</tt>, which
3710: 20 6f 66 74 65 6e 20 6c 65 61 64 73 20 74 6f 20   often leads to 
3720: 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 20 63 6f  more readable co
3730: 64 65 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f  de...</p><p>..</
3740: 70 3e 3c 70 3e 3c 74 74 3e 28 64 65 66 69 6e 65  p><p><tt>(define
3750: 26 6e 62 73 70 3b 74 72 61 6e 73 6c 61 74 65 3c  &nbsp;translate<
3760: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
3770: 3b 28 6c 61 6d 62 64 61 26 6e 62 73 70 3b 28 78  ;(lambda&nbsp;(x
3780: 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  )<br>..&nbsp;&nb
3790: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28  sp;&nbsp;&nbsp;(
37a0: 6d 61 74 63 68 26 6e 62 73 70 3b 78 3c 62 72 3e  match&nbsp;x<br>
37b0: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  ..&nbsp;&nbsp;&n
37c0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
37d0: 26 6e 62 73 70 3b 5b 28 6c 65 74 26 6e 62 73 70  &nbsp;[(let&nbsp
37e0: 3b 28 28 2c 76 61 72 2a 26 6e 62 73 70 3b 2c 65  ;((,var*&nbsp;,e
37f0: 78 70 72 2a 29 26 6e 62 73 70 3b 2e 2e 2e 29 26  xpr*)&nbsp;...)&
3800: 6e 62 73 70 3b 2c 62 6f 64 79 26 6e 62 73 70 3b  nbsp;,body&nbsp;
3810: 2c 62 6f 64 79 2a 26 6e 62 73 70 3b 2e 2e 2e 29  ,body*&nbsp;...)
3820: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
3830: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
3840: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
3850: 60 28 28 6c 61 6d 62 64 61 26 6e 62 73 70 3b 2c  `((lambda&nbsp;,
3860: 76 61 72 2a 26 6e 62 73 70 3b 2c 62 6f 64 79 26  var*&nbsp;,body&
3870: 6e 62 73 70 3b 2c 62 6f 64 79 2a 26 6e 62 73 70  nbsp;,body*&nbsp
3880: 3b 2e 2e 2e 29 26 6e 62 73 70 3b 2c 65 78 70 72  ;...)&nbsp;,expr
3890: 2a 26 6e 62 73 70 3b 2e 2e 2e 29 5d 3c 62 72 3e  *&nbsp;...)]<br>
38a0: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  ..&nbsp;&nbsp;&n
38b0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
38c0: 26 6e 62 73 70 3b 5b 2c 78 26 6e 62 73 70 3b 28  &nbsp;[,x&nbsp;(
38d0: 65 72 72 6f 72 26 6e 62 73 70 3b 27 74 72 61 6e  error&nbsp;'tran
38e0: 73 6c 61 74 65 26 6e 62 73 70 3b 22 69 6e 76 61  slate&nbsp;"inva
38f0: 6c 69 64 26 6e 62 73 70 3b 65 78 70 72 65 73 73  lid&nbsp;express
3900: 69 6f 6e 3a 26 6e 62 73 70 3b 7e 73 22 26 6e 62  ion:&nbsp;~s"&nb
3910: 73 70 3b 78 29 5d 29 29 29 3c 2f 74 74 3e 0a 3c  sp;x)])))</tt>.<
3920: 2f 70 3e 3c 70 3e 57 69 74 68 69 6e 20 65 61 63  /p><p>Within eac
3930: 68 20 73 75 62 66 6f 72 6d 20 66 6f 6c 6c 6f 77  h subform follow
3940: 65 64 20 62 79 20 61 6e 20 65 6c 6c 69 70 73 69  ed by an ellipsi
3950: 73 2c 20 65 61 63 68 0a 63 6f 6d 6d 61 2d 70 72  s, each.comma-pr
3960: 65 66 69 78 65 64 20 69 74 65 6d 20 6d 75 73 74  efixed item must
3970: 20 62 65 20 61 20 6c 69 73 74 20 61 6e 64 20 61   be a list and a
3980: 6c 6c 20 73 75 63 68 20 69 74 65 6d 73 20 77 69  ll such items wi
3990: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 73 75  thin the same.su
39a0: 62 66 6f 72 6d 20 6d 75 73 74 20 68 61 76 65 20  bform must have 
39b0: 74 68 65 20 73 61 6d 65 20 6c 65 6e 67 74 68 2e  the same length.
39c0: 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70  .The following p
39d0: 72 6f 63 65 64 75 72 65 20 65 78 74 72 61 63 74  rocedure extract
39e0: 73 20 74 77 6f 20 6c 69 73 74 73 20 66 72 6f 6d  s two lists from
39f0: 20 69 74 73 20 69 6e 70 75 74 20 61 6e 64 20 6d   its input and m
3a00: 65 72 67 65 73 0a 74 68 65 6d 20 74 6f 20 66 6f  erges.them to fo
3a10: 72 6d 20 61 20 6c 69 73 74 20 6f 66 20 70 61 69  rm a list of pai
3a20: 72 73 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f  rs...</p><p>..</
3a30: 70 3e 3c 70 3e 3c 74 74 3e 28 64 65 66 69 6e 65  p><p><tt>(define
3a40: 26 6e 62 73 70 3b 28 66 26 6e 62 73 70 3b 78 29  &nbsp;(f&nbsp;x)
3a50: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
3a60: 70 3b 28 6d 61 74 63 68 26 6e 62 73 70 3b 78 3c  p;(match&nbsp;x<
3a70: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
3a80: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28 28  ;&nbsp;&nbsp;[((
3a90: 2c 61 26 6e 62 73 70 3b 2e 2e 2e 29 26 6e 62 73  ,a&nbsp;...)&nbs
3aa0: 70 3b 28 2c 62 26 6e 62 73 70 3b 2e 2e 2e 29 29  p;(,b&nbsp;...))
3ab0: 26 6e 62 73 70 3b 60 28 28 2c 61 26 6e 62 73 70  &nbsp;`((,a&nbsp
3ac0: 3b 2e 26 6e 62 73 70 3b 2c 62 29 26 6e 62 73 70  ;.&nbsp;,b)&nbsp
3ad0: 3b 2e 2e 2e 29 5d 29 29 3c 62 72 3e 0a 0a 28 66  ;...)]))<br>..(f
3ae0: 26 6e 62 73 70 3b 27 28 28 31 26 6e 62 73 70 3b  &nbsp;'((1&nbsp;
3af0: 32 26 6e 62 73 70 3b 33 29 26 6e 62 73 70 3b 28  2&nbsp;3)&nbsp;(
3b00: 61 26 6e 62 73 70 3b 62 26 6e 62 73 70 3b 63 29  a&nbsp;b&nbsp;c)
3b10: 29 29 26 6e 62 73 70 3b 3c 69 6d 67 20 73 72 63  ))&nbsp;<img src
3b20: 3d 22 6d 61 74 63 68 5f 66 69 6c 65 73 2f 30 2e  ="match_files/0.
3b30: 67 69 66 22 20 61 6c 74 3d 22 26 6c 74 3b 67 72  gif" alt="&lt;gr
3b40: 61 70 68 69 63 26 67 74 3b 22 3e 26 6e 62 73 70  aphic&gt;">&nbsp
3b50: 3b 28 28 31 26 6e 62 73 70 3b 2e 26 6e 62 73 70  ;((1&nbsp;.&nbsp
3b60: 3b 61 29 26 6e 62 73 70 3b 28 32 26 6e 62 73 70  ;a)&nbsp;(2&nbsp
3b70: 3b 2e 26 6e 62 73 70 3b 62 29 26 6e 62 73 70 3b  ;.&nbsp;b)&nbsp;
3b80: 28 33 26 6e 62 73 70 3b 2e 26 6e 62 73 70 3b 63  (3&nbsp;.&nbsp;c
3b90: 29 29 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c 70 3e 49  ))</tt>.</p><p>I
3ba0: 74 20 66 61 69 6c 73 20 69 66 20 74 68 65 20 74  t fails if the t
3bb0: 77 6f 20 6c 69 73 74 73 20 68 61 76 65 20 64 69  wo lists have di
3bc0: 66 66 65 72 65 6e 74 20 6c 65 6e 67 74 68 73 2e  fferent lengths.
3bd0: 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c  ..</p><p>..</p><
3be0: 70 3e 3c 74 74 3e 28 66 26 6e 62 73 70 3b 27 28  p><tt>(f&nbsp;'(
3bf0: 28 31 26 6e 62 73 70 3b 32 26 6e 62 73 70 3b 33  (1&nbsp;2&nbsp;3
3c00: 29 26 6e 62 73 70 3b 28 61 26 6e 62 73 70 3b 62  )&nbsp;(a&nbsp;b
3c10: 29 29 29 26 6e 62 73 70 3b 3c 69 6d 67 20 73 72  )))&nbsp;<img sr
3c20: 63 3d 22 6d 61 74 63 68 5f 66 69 6c 65 73 2f 30  c="match_files/0
3c30: 2e 67 69 66 22 20 61 6c 74 3d 22 26 6c 74 3b 67  .gif" alt="&lt;g
3c40: 72 61 70 68 69 63 26 67 74 3b 22 3e 26 6e 62 73  raphic&gt;">&nbs
3c50: 70 3b 3c 69 3e 65 72 72 6f 72 3c 2f 69 3e 3c 2f  p;<i>error</i></
3c60: 74 74 3e 0a 3c 2f 70 3e 3c 70 3e 54 68 65 20 66  tt>.</p><p>The f
3c70: 6f 6c 6c 6f 77 69 6e 67 20 61 6c 73 6f 20 66 61  ollowing also fa
3c80: 69 6c 73 20 62 65 63 61 75 73 65 20 6f 6e 65 20  ils because one 
3c90: 6f 66 20 74 68 65 20 69 74 65 6d 73 20 69 73 20  of the items is 
3ca0: 6e 6f 74 20 65 76 65 6e 20 61 20 6c 69 73 74 2e  not even a list.
3cb0: 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c  ..</p><p>..</p><
3cc0: 70 3e 3c 74 74 3e 28 64 65 66 69 6e 65 26 6e 62  p><tt>(define&nb
3cd0: 73 70 3b 28 66 26 6e 62 73 70 3b 78 29 3c 62 72  sp;(f&nbsp;x)<br
3ce0: 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28  >..&nbsp;&nbsp;(
3cf0: 6d 61 74 63 68 26 6e 62 73 70 3b 78 3c 62 72 3e  match&nbsp;x<br>
3d00: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  ..&nbsp;&nbsp;&n
3d10: 62 73 70 3b 26 6e 62 73 70 3b 5b 28 2c 61 26 6e  bsp;&nbsp;[(,a&n
3d20: 62 73 70 3b 2c 62 26 6e 62 73 70 3b 2e 2e 2e 29  bsp;,b&nbsp;...)
3d30: 26 6e 62 73 70 3b 60 28 28 2c 61 26 6e 62 73 70  &nbsp;`((,a&nbsp
3d40: 3b 2c 62 29 26 6e 62 73 70 3b 2e 2e 2e 29 5d 29  ;,b)&nbsp;...)])
3d50: 29 3c 62 72 3e 0a 0a 28 66 26 6e 62 73 70 3b 27  )<br>..(f&nbsp;'
3d60: 28 31 26 6e 62 73 70 3b 32 26 6e 62 73 70 3b 33  (1&nbsp;2&nbsp;3
3d70: 26 6e 62 73 70 3b 34 29 29 26 6e 62 73 70 3b 3c  &nbsp;4))&nbsp;<
3d80: 69 6d 67 20 73 72 63 3d 22 6d 61 74 63 68 5f 66  img src="match_f
3d90: 69 6c 65 73 2f 30 2e 67 69 66 22 20 61 6c 74 3d  iles/0.gif" alt=
3da0: 22 26 6c 74 3b 67 72 61 70 68 69 63 26 67 74 3b  "&lt;graphic&gt;
3db0: 22 3e 26 6e 62 73 70 3b 3c 69 3e 65 72 72 6f 72  ">&nbsp;<i>error
3dc0: 3c 2f 69 3e 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c 70  </i></tt>.</p><p
3dd0: 3e 41 20 73 75 62 66 6f 72 6d 20 66 6f 6c 6c 6f  >A subform follo
3de0: 77 65 64 20 62 79 20 61 6e 20 65 6c 6c 69 70 73  wed by an ellips
3df0: 65 73 20 6d 61 79 20 62 65 20 63 6f 6e 74 61 69  es may be contai
3e00: 6e 65 64 20 77 69 74 68 20 61 20 6c 61 72 67 65  ned with a large
3e10: 72 20 73 75 62 66 6f 72 6d 0a 74 68 61 74 20 69  r subform.that i
3e20: 73 20 61 6c 73 6f 20 66 6f 6c 6c 6f 77 65 64 20  s also followed 
3e30: 62 79 20 61 6e 20 65 6c 6c 69 70 73 69 73 2e 0a  by an ellipsis..
3e40: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 65 61  In this case, ea
3e50: 63 68 20 63 6f 6d 6d 61 2d 70 72 65 66 69 78 65  ch comma-prefixe
3e60: 64 20 69 74 65 6d 20 6d 75 73 74 20 62 65 20 61  d item must be a
3e70: 20 6c 69 73 74 20 6f 66 20 6c 69 73 74 73 2c 20   list of lists, 
3e80: 65 61 63 68 20 73 75 63 68 0a 69 74 65 6d 20 6d  each such.item m
3e90: 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  ust have the sam
3ea0: 65 20 6c 65 6e 67 74 68 2c 20 61 6e 64 20 74 68  e length, and th
3eb0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
3ec0: 73 75 62 6c 69 73 74 73 20 6f 66 20 65 61 63 68  sublists of each
3ed0: 0a 73 75 63 68 20 69 74 65 6d 20 6d 75 73 74 20  .such item must 
3ee0: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6c 65  have the same le
3ef0: 6e 67 74 68 73 2e 0a 54 68 69 73 20 72 65 71 75  ngths..This requ
3f00: 69 72 65 6d 65 6e 74 20 67 65 6e 65 72 61 6c 69  irement generali
3f10: 7a 65 73 20 74 6f 20 63 6f 6d 6d 61 2d 70 72 65  zes to comma-pre
3f20: 66 69 78 65 64 20 69 74 65 6d 73 20 6e 65 73 74  fixed items nest
3f30: 65 64 20 77 69 74 68 69 6e 0a 6d 6f 72 65 20 74  ed within.more t
3f40: 68 61 6e 20 74 77 6f 20 6c 65 76 65 6c 73 20 6f  han two levels o
3f50: 66 20 65 6c 6c 69 73 70 69 73 2d 66 6f 6c 6c 6f  f ellispis-follo
3f60: 77 65 64 20 73 75 62 66 6f 72 6d 73 2e 0a 0a 3c  wed subforms...<
3f70: 2f 70 3e 3c 70 3e 0a 54 68 65 20 66 6f 6c 6c 6f  /p><p>.The follo
3f80: 77 69 6e 67 20 70 72 6f 63 65 64 75 72 65 20 69  wing procedure i
3f90: 6c 6c 75 73 74 72 61 74 65 73 20 74 77 6f 20 6c  llustrates two l
3fa0: 65 76 65 6c 73 20 6f 66 20 6e 65 73 74 65 64 20  evels of nested 
3fb0: 65 6c 6c 69 70 73 65 73 20 69 6e 20 62 6f 74 68  ellipses in both
3fc0: 0a 74 68 65 20 69 6e 70 75 74 20 61 6e 64 20 6f  .the input and o
3fd0: 75 74 70 75 74 2e 0a 49 74 20 63 6f 6e 76 65 72  utput..It conver
3fe0: 74 73 20 75 6e 6e 61 6d 65 64 20 3c 74 74 3e 6c  ts unnamed <tt>l
3ff0: 65 74 3c 2f 74 74 3e 20 65 78 70 72 65 73 73 69  et</tt> expressi
4000: 6f 6e 73 20 69 6e 74 6f 0a 64 69 72 65 63 74 20  ons into.direct 
4010: 3c 74 74 3e 6c 61 6d 62 64 61 3c 2f 74 74 3e 20  <tt>lambda</tt> 
4020: 61 70 70 6c 69 63 61 74 69 6f 6e 73 2c 20 77 68  applications, wh
4030: 65 72 65 20 74 68 65 20 3c 74 74 3e 6c 65 74 3c  ere the <tt>let<
4040: 2f 74 74 3e 20 68 61 73 20 62 65 65 6e 0a 67 65  /tt> has been.ge
4050: 6e 65 72 61 6c 69 7a 65 64 20 74 6f 20 61 6c 6c  neralized to all
4060: 6f 77 20 61 6e 20 69 6d 70 6c 69 63 69 74 20 3c  ow an implicit <
4070: 74 74 3e 62 65 67 69 6e 3c 2f 74 74 3e 20 69 6e  tt>begin</tt> in
4080: 20 65 61 63 68 20 72 69 67 68 74 2d 68 61 6e 64   each right-hand
4090: 2d 73 69 64 65 0a 65 78 70 72 65 73 73 69 6f 6e  -side.expression
40a0: 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e  ...</p><p>..</p>
40b0: 3c 70 3e 3c 74 74 3e 28 64 65 66 69 6e 65 26 6e  <p><tt>(define&n
40c0: 62 73 70 3b 28 66 26 6e 62 73 70 3b 78 29 3c 62  bsp;(f&nbsp;x)<b
40d0: 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b  r>..&nbsp;&nbsp;
40e0: 28 6d 61 74 63 68 26 6e 62 73 70 3b 78 3c 62 72  (match&nbsp;x<br
40f0: 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  >..&nbsp;&nbsp;&
4100: 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28 6c 65 74  nbsp;&nbsp;[(let
4110: 26 6e 62 73 70 3b 28 5b 2c 78 26 6e 62 73 70 3b  &nbsp;([,x&nbsp;
4120: 2c 65 31 26 6e 62 73 70 3b 2e 2e 2e 5d 26 6e 62  ,e1&nbsp;...]&nb
4130: 73 70 3b 2e 2e 2e 29 26 6e 62 73 70 3b 2c 62 31  sp;...)&nbsp;,b1
4140: 26 6e 62 73 70 3b 2c 62 32 26 6e 62 73 70 3b 2e  &nbsp;,b2&nbsp;.
4150: 2e 2e 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26  ..)<br>..&nbsp;&
4160: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
4170: 3b 26 6e 62 73 70 3b 60 28 28 6c 61 6d 62 64 61  ;&nbsp;`((lambda
4180: 26 6e 62 73 70 3b 28 2c 78 26 6e 62 73 70 3b 2e  &nbsp;(,x&nbsp;.
4190: 2e 2e 29 26 6e 62 73 70 3b 2c 62 31 26 6e 62 73  ..)&nbsp;,b1&nbs
41a0: 70 3b 2c 62 32 26 6e 62 73 70 3b 2e 2e 2e 29 3c  p;,b2&nbsp;...)<
41b0: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
41c0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
41d0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28  sp;&nbsp;&nbsp;(
41e0: 62 65 67 69 6e 26 6e 62 73 70 3b 2c 65 31 26 6e  begin&nbsp;,e1&n
41f0: 62 73 70 3b 2e 2e 2e 29 26 6e 62 73 70 3b 2e 2e  bsp;...)&nbsp;..
4200: 2e 29 5d 29 29 3c 62 72 3e 0a 0a 28 66 26 6e 62  .)]))<br>..(f&nb
4210: 73 70 3b 27 28 6c 65 74 26 6e 62 73 70 3b 28 28  sp;'(let&nbsp;((
4220: 78 26 6e 62 73 70 3b 28 77 72 69 74 65 26 6e 62  x&nbsp;(write&nb
4230: 73 70 3b 27 6f 6e 65 29 26 6e 62 73 70 3b 33 29  sp;'one)&nbsp;3)
4240: 26 6e 62 73 70 3b 28 79 26 6e 62 73 70 3b 28 77  &nbsp;(y&nbsp;(w
4250: 72 69 74 65 26 6e 62 73 70 3b 27 74 77 6f 29 26  rite&nbsp;'two)&
4260: 6e 62 73 70 3b 34 29 29 26 6e 62 73 70 3b 28 6c  nbsp;4))&nbsp;(l
4270: 69 73 74 26 6e 62 73 70 3b 78 26 6e 62 73 70 3b  ist&nbsp;x&nbsp;
4280: 79 29 29 29 26 6e 62 73 70 3b 3c 69 6d 67 20 73  y)))&nbsp;<img s
4290: 72 63 3d 22 6d 61 74 63 68 5f 66 69 6c 65 73 2f  rc="match_files/
42a0: 30 2e 67 69 66 22 20 61 6c 74 3d 22 26 6c 74 3b  0.gif" alt="&lt;
42b0: 67 72 61 70 68 69 63 26 67 74 3b 22 3e 3c 62 72  graphic&gt;"><br
42c0: 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28  >..&nbsp;&nbsp;(
42d0: 28 6c 61 6d 62 64 61 26 6e 62 73 70 3b 28 78 26  (lambda&nbsp;(x&
42e0: 6e 62 73 70 3b 79 29 26 6e 62 73 70 3b 28 6c 69  nbsp;y)&nbsp;(li
42f0: 73 74 26 6e 62 73 70 3b 78 26 6e 62 73 70 3b 79  st&nbsp;x&nbsp;y
4300: 29 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e  ))<br>..&nbsp;&n
4310: 62 73 70 3b 26 6e 62 73 70 3b 28 62 65 67 69 6e  bsp;&nbsp;(begin
4320: 26 6e 62 73 70 3b 28 77 72 69 74 65 26 6e 62 73  &nbsp;(write&nbs
4330: 70 3b 27 6f 6e 65 29 26 6e 62 73 70 3b 33 29 3c  p;'one)&nbsp;3)<
4340: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
4350: 3b 26 6e 62 73 70 3b 28 62 65 67 69 6e 26 6e 62  ;&nbsp;(begin&nb
4360: 73 70 3b 28 77 72 69 74 65 26 6e 62 73 70 3b 27  sp;(write&nbsp;'
4370: 74 77 6f 29 26 6e 62 73 70 3b 34 29 29 3c 2f 74  two)&nbsp;4))</t
4380: 74 3e 0a 3c 2f 70 3e 3c 70 3e 49 6e 20 74 68 65  t>.</p><p>In the
4390: 20 6f 75 74 70 75 74 2c 20 61 20 73 75 62 66 6f   output, a subfo
43a0: 72 6d 20 6d 61 79 20 62 65 20 66 6f 6c 6c 6f 77  rm may be follow
43b0: 65 64 20 64 69 72 65 63 74 6c 79 20 62 79 20 74  ed directly by t
43c0: 77 6f 20 6f 72 20 6d 6f 72 65 0a 65 6c 6c 69 70  wo or more.ellip
43d0: 73 65 73 3b 20 74 68 65 20 72 65 71 75 69 72 65  ses; the require
43e0: 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 73 61  ments are the sa
43f0: 6d 65 20 61 73 20 66 6f 72 20 6e 65 73 74 65 64  me as for nested
4400: 20 65 6c 6c 69 70 73 65 73 2c 20 62 75 74 0a 74   ellipses, but.t
4410: 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 6c 61  he result is fla
4420: 74 74 65 6e 65 64 20 72 61 74 68 65 72 20 74 68  ttened rather th
4430: 61 6e 20 6e 65 73 74 65 64 2c 20 61 73 20 69 6c  an nested, as il
4440: 6c 75 73 74 72 61 74 65 64 20 62 79 20 74 68 65  lustrated by the
4450: 0a 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 61 6d 70  .following examp
4460: 6c 65 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f  le...</p><p>..</
4470: 70 3e 3c 70 3e 3c 74 74 3e 28 64 65 66 69 6e 65  p><p><tt>(define
4480: 26 6e 62 73 70 3b 28 66 26 6e 62 73 70 3b 78 29  &nbsp;(f&nbsp;x)
4490: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
44a0: 70 3b 28 6d 61 74 63 68 26 6e 62 73 70 3b 78 3c  p;(match&nbsp;x<
44b0: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
44c0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28 66  ;&nbsp;&nbsp;[(f
44d0: 6f 6f 26 6e 62 73 70 3b 28 2c 78 26 6e 62 73 70  oo&nbsp;(,x&nbsp
44e0: 3b 2e 2e 2e 29 26 6e 62 73 70 3b 2e 2e 2e 29 3c  ;...)&nbsp;...)<
44f0: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
4500: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
4510: 73 70 3b 60 28 6c 69 73 74 26 6e 62 73 70 3b 28  sp;`(list&nbsp;(
4520: 63 61 72 26 6e 62 73 70 3b 2c 78 29 26 6e 62 73  car&nbsp;,x)&nbs
4530: 70 3b 2e 2e 2e 26 6e 62 73 70 3b 2e 2e 2e 29 5d  p;...&nbsp;...)]
4540: 29 29 3c 62 72 3e 0a 0a 28 66 26 6e 62 73 70 3b  ))<br>..(f&nbsp;
4550: 27 28 66 6f 6f 26 6e 62 73 70 3b 28 61 29 26 6e  '(foo&nbsp;(a)&n
4560: 62 73 70 3b 28 62 26 6e 62 73 70 3b 63 26 6e 62  bsp;(b&nbsp;c&nb
4570: 73 70 3b 64 26 6e 62 73 70 3b 65 29 26 6e 62 73  sp;d&nbsp;e)&nbs
4580: 70 3b 28 29 26 6e 62 73 70 3b 28 66 26 6e 62 73  p;()&nbsp;(f&nbs
4590: 70 3b 67 29 29 29 26 6e 62 73 70 3b 3c 69 6d 67  p;g)))&nbsp;<img
45a0: 20 73 72 63 3d 22 6d 61 74 63 68 5f 66 69 6c 65   src="match_file
45b0: 73 2f 30 2e 67 69 66 22 20 61 6c 74 3d 22 26 6c  s/0.gif" alt="&l
45c0: 74 3b 67 72 61 70 68 69 63 26 67 74 3b 22 3e 3c  t;graphic&gt;"><
45d0: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
45e0: 3b 28 6c 69 73 74 26 6e 62 73 70 3b 28 63 61 72  ;(list&nbsp;(car
45f0: 26 6e 62 73 70 3b 61 29 26 6e 62 73 70 3b 28 63  &nbsp;a)&nbsp;(c
4600: 61 72 26 6e 62 73 70 3b 62 29 26 6e 62 73 70 3b  ar&nbsp;b)&nbsp;
4610: 28 63 61 72 26 6e 62 73 70 3b 63 29 26 6e 62 73  (car&nbsp;c)&nbs
4620: 70 3b 28 63 61 72 26 6e 62 73 70 3b 64 29 26 6e  p;(car&nbsp;d)&n
4630: 62 73 70 3b 28 63 61 72 26 6e 62 73 70 3b 65 29  bsp;(car&nbsp;e)
4640: 26 6e 62 73 70 3b 28 63 61 72 26 6e 62 73 70 3b  &nbsp;(car&nbsp;
4650: 66 29 26 6e 62 73 70 3b 28 63 61 72 26 6e 62 73  f)&nbsp;(car&nbs
4660: 70 3b 67 29 29 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c  p;g))</tt>.</p><
4670: 70 3e 53 6f 6d 65 74 69 6d 65 73 20 69 74 20 69  p>Sometimes it i
4680: 73 20 75 73 65 66 75 6c 20 74 6f 20 65 78 70 6c  s useful to expl
4690: 69 63 69 74 6c 79 20 6e 61 6d 65 20 74 68 65 20  icitly name the 
46a0: 6f 70 65 72 61 74 6f 72 20 69 6e 20 61 0a 22 63  operator in a."c
46b0: 61 74 61 22 20 73 75 62 70 61 74 74 65 72 6e 2e  ata" subpattern.
46c0: 0a 57 68 65 72 65 61 73 20 3c 74 74 3e 2c 5b 3c  .Whereas <tt>,[<
46d0: 69 3e 69 64 3c 2f 69 3e 26 6e 62 73 70 3b 2e 2e  i>id</i>&nbsp;..
46e0: 2e 5d 3c 2f 74 74 3e 20 72 65 63 75 72 73 20 74  .]</tt> recurs t
46f0: 6f 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  o the top of the
4700: 20 63 75 72 72 65 6e 74 0a 3c 74 74 3e 6d 61 74   current.<tt>mat
4710: 63 68 3c 2f 74 74 3e 2c 20 3c 74 74 3e 2c 5b 3c  ch</tt>, <tt>,[<
4720: 69 3e 63 61 74 61 3c 2f 69 3e 26 6e 62 73 70 3b  i>cata</i>&nbsp;
4730: 2d 26 67 74 3b 26 6e 62 73 70 3b 3c 69 3e 69 64  -&gt;&nbsp;<i>id
4740: 3c 2f 69 3e 26 6e 62 73 70 3b 2e 2e 2e 5d 3c 2f  </i>&nbsp;...]</
4750: 74 74 3e 20 72 65 63 75 72 73 0a 74 6f 20 3c 74  tt> recurs.to <t
4760: 74 3e 3c 69 3e 63 61 74 61 3c 2f 69 3e 3c 2f 74  t><i>cata</i></t
4770: 74 3e 2e 0a 3c 74 74 3e 3c 69 3e 63 61 74 61 3c  t>..<tt><i>cata<
4780: 2f 69 3e 3c 2f 74 74 3e 20 6d 75 73 74 20 65 76  /i></tt> must ev
4790: 61 6c 75 61 74 65 20 74 6f 20 61 20 70 72 6f 63  aluate to a proc
47a0: 65 64 75 72 65 20 74 68 61 74 20 61 63 63 65 70  edure that accep
47b0: 74 73 0a 6f 6e 65 20 61 72 67 75 6d 65 6e 74 2c  ts.one argument,
47c0: 20 74 68 65 20 69 6e 70 75 74 20 65 78 70 72 65   the input expre
47d0: 73 73 69 6f 6e 2c 20 61 6e 64 20 72 65 74 75 72  ssion, and retur
47e0: 6e 73 20 61 73 20 6d 61 6e 79 20 76 61 6c 75 65  ns as many value
47f0: 73 0a 61 73 20 74 68 65 72 65 20 61 72 65 20 69  s.as there are i
4800: 64 65 6e 74 69 66 69 65 72 73 20 66 6f 6c 6c 6f  dentifiers follo
4810: 77 69 6e 67 20 74 68 65 20 3c 74 74 3e 2d 26 67  wing the <tt>-&g
4820: 74 3b 3c 2f 74 74 3e 2e 0a 0a 3c 2f 70 3e 3c 70  t;</tt>...</p><p
4830: 3e 0a 54 68 69 73 20 61 6c 6c 6f 77 73 20 70 72  >.This allows pr
4840: 6f 63 65 73 73 69 6e 67 20 74 6f 20 62 65 20 73  ocessing to be s
4850: 70 6c 69 74 20 69 6e 74 6f 20 73 65 76 65 72 61  plit into severa
4860: 6c 0a 6d 75 74 75 61 6c 6c 79 20 72 65 63 75 72  l.mutually recur
4870: 73 69 76 65 20 70 72 6f 63 65 64 75 72 65 73 2c  sive procedures,
4880: 20 61 73 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f   as in the follo
4890: 77 69 6e 67 20 70 61 72 73 65 72 20 66 6f 72 20  wing parser for 
48a0: 74 68 65 20 73 69 6d 70 6c 65 0a 6c 61 6e 67 75  the simple.langu
48b0: 61 67 65 20 64 65 66 69 6e 65 64 20 62 79 20 74  age defined by t
48c0: 68 65 20 67 72 61 6d 6d 61 72 20 62 65 6c 6f 77  he grammar below
48d0: 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 20 20 0a 20  ...</p><p>..  . 
48e0: 20 0a 20 20 0a 20 20 3c 2f 70 3e 3c 74 61 62 6c   .  .  </p><tabl
48f0: 65 3e 3c 74 62 6f 64 79 3e 3c 74 72 3e 3c 74 64  e><tbody><tr><td
4900: 20 6e 6f 77 72 61 70 3d 22 6e 6f 77 72 61 70 22   nowrap="nowrap"
4910: 3e 0a 26 6c 74 3b 50 72 6f 67 26 67 74 3b 3c 2f  >.&lt;Prog&gt;</
4920: 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  td><td align="ce
4930: 6e 74 65 72 22 3e 3c 69 6d 67 20 73 72 63 3d 22  nter"><img src="
4940: 6d 61 74 63 68 5f 66 69 6c 65 73 2f 31 2e 67 69  match_files/1.gi
4950: 66 22 20 61 6c 74 3d 22 26 6c 74 3b 67 72 61 70  f" alt="&lt;grap
4960: 68 69 63 26 67 74 3b 22 3e 3c 2f 74 64 3e 3c 74  hic&gt;"></td><t
4970: 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77 72 61 70  d nowrap="nowrap
4980: 22 3e 3c 74 74 3e 28 70 72 6f 67 72 61 6d 3c 2f  "><tt>(program</
4990: 74 74 3e 20 26 6c 74 3b 53 74 6d 74 26 67 74 3b  tt> &lt;Stmt&gt;
49a0: 2a 20 26 6c 74 3b 45 78 70 72 26 67 74 3b 3c 74  * &lt;Expr&gt;<t
49b0: 74 3e 29 3c 2f 74 74 3e 3c 2f 74 64 3e 3c 2f 74  t>)</tt></td></t
49c0: 72 3e 3c 74 72 3e 3c 74 64 20 6e 6f 77 72 61 70  r><tr><td nowrap
49d0: 3d 22 6e 6f 77 72 61 70 22 3e 0a 26 6c 74 3b 53  ="nowrap">.&lt;S
49e0: 74 6d 74 26 67 74 3b 3c 2f 74 64 3e 3c 74 64 20  tmt&gt;</td><td 
49f0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 3c  align="center"><
4a00: 69 6d 67 20 73 72 63 3d 22 6d 61 74 63 68 5f 66  img src="match_f
4a10: 69 6c 65 73 2f 31 2e 67 69 66 22 20 61 6c 74 3d  iles/1.gif" alt=
4a20: 22 26 6c 74 3b 67 72 61 70 68 69 63 26 67 74 3b  "&lt;graphic&gt;
4a30: 22 3e 3c 2f 74 64 3e 3c 74 64 20 6e 6f 77 72 61  "></td><td nowra
4a40: 70 3d 22 6e 6f 77 72 61 70 22 3e 3c 74 74 3e 28  p="nowrap"><tt>(
4a50: 69 66 3c 2f 74 74 3e 20 26 6c 74 3b 45 78 70 72  if</tt> &lt;Expr
4a60: 26 67 74 3b 20 26 6c 74 3b 53 74 6d 74 26 67 74  &gt; &lt;Stmt&gt
4a70: 3b 20 26 6c 74 3b 53 74 6d 74 26 67 74 3b 3c 74  ; &lt;Stmt&gt;<t
4a80: 74 3e 29 3c 2f 74 74 3e 3c 2f 74 64 3e 3c 2f 74  t>)</tt></td></t
4a90: 72 3e 3c 74 72 3e 3c 74 64 20 6e 6f 77 72 61 70  r><tr><td nowrap
4aa0: 3d 22 6e 6f 77 72 61 70 22 3e 0a 20 20 20 20 20  ="nowrap">.     
4ab0: 20 20 20 20 20 3c 2f 74 64 3e 3c 74 64 20 61 6c       </td><td al
4ac0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 7c 3c 2f  ign="center">|</
4ad0: 74 64 3e 3c 74 64 20 6e 6f 77 72 61 70 3d 22 6e  td><td nowrap="n
4ae0: 6f 77 72 61 70 22 3e 3c 74 74 3e 28 73 65 74 21  owrap"><tt>(set!
4af0: 3c 2f 74 74 3e 20 26 6c 74 3b 76 61 72 26 67 74  </tt> &lt;var&gt
4b00: 3b 20 26 6c 74 3b 45 78 70 72 26 67 74 3b 3c 74  ; &lt;Expr&gt;<t
4b10: 74 3e 29 3c 2f 74 74 3e 3c 2f 74 64 3e 3c 2f 74  t>)</tt></td></t
4b20: 72 3e 3c 74 72 3e 3c 74 64 20 6e 6f 77 72 61 70  r><tr><td nowrap
4b30: 3d 22 6e 6f 77 72 61 70 22 3e 0a 26 6c 74 3b 45  ="nowrap">.&lt;E
4b40: 78 70 72 26 67 74 3b 3c 2f 74 64 3e 3c 74 64 20  xpr&gt;</td><td 
4b50: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 3c  align="center"><
4b60: 69 6d 67 20 73 72 63 3d 22 6d 61 74 63 68 5f 66  img src="match_f
4b70: 69 6c 65 73 2f 31 2e 67 69 66 22 20 61 6c 74 3d  iles/1.gif" alt=
4b80: 22 26 6c 74 3b 67 72 61 70 68 69 63 26 67 74 3b  "&lt;graphic&gt;
4b90: 22 3e 3c 2f 74 64 3e 3c 74 64 20 6e 6f 77 72 61  "></td><td nowra
4ba0: 70 3d 22 6e 6f 77 72 61 70 22 3e 26 6c 74 3b 76  p="nowrap">&lt;v
4bb0: 61 72 26 67 74 3b 3c 2f 74 64 3e 3c 2f 74 72 3e  ar&gt;</td></tr>
4bc0: 3c 74 72 3e 3c 74 64 20 6e 6f 77 72 61 70 3d 22  <tr><td nowrap="
4bd0: 6e 6f 77 72 61 70 22 3e 0a 20 20 20 20 20 20 20  nowrap">.       
4be0: 20 20 20 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67     </td><td alig
4bf0: 6e 3d 22 63 65 6e 74 65 72 22 3e 7c 3c 2f 74 64  n="center">|</td
4c00: 3e 3c 74 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77  ><td nowrap="now
4c10: 72 61 70 22 3e 26 6c 74 3b 69 6e 74 65 67 65 72  rap">&lt;integer
4c20: 26 67 74 3b 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 74  &gt;</td></tr><t
4c30: 72 3e 3c 74 64 20 6e 6f 77 72 61 70 3d 22 6e 6f  r><td nowrap="no
4c40: 77 72 61 70 22 3e 0a 20 20 20 20 20 20 20 20 20  wrap">.         
4c50: 20 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d   </td><td align=
4c60: 22 63 65 6e 74 65 72 22 3e 7c 3c 2f 74 64 3e 3c  "center">|</td><
4c70: 74 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77 72 61  td nowrap="nowra
4c80: 70 22 3e 3c 74 74 3e 28 69 66 3c 2f 74 74 3e 20  p"><tt>(if</tt> 
4c90: 26 6c 74 3b 45 78 70 72 26 67 74 3b 20 26 6c 74  &lt;Expr&gt; &lt
4ca0: 3b 45 78 70 72 26 67 74 3b 20 26 6c 74 3b 45 78  ;Expr&gt; &lt;Ex
4cb0: 70 72 26 67 74 3b 3c 74 74 3e 29 3c 2f 74 74 3e  pr&gt;<tt>)</tt>
4cc0: 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 74 72 3e 3c 74  </td></tr><tr><t
4cd0: 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77 72 61 70  d nowrap="nowrap
4ce0: 22 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 2f 74  ">.          </t
4cf0: 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  d><td align="cen
4d00: 74 65 72 22 3e 7c 3c 2f 74 64 3e 3c 74 64 20 6e  ter">|</td><td n
4d10: 6f 77 72 61 70 3d 22 6e 6f 77 72 61 70 22 3e 3c  owrap="nowrap"><
4d20: 74 74 3e 28 3c 2f 74 74 3e 26 6c 74 3b 45 78 70  tt>(</tt>&lt;Exp
4d30: 72 26 67 74 3b 20 26 6c 74 3b 45 78 70 72 26 67  r&gt; &lt;Expr&g
4d40: 74 3b 2a 3c 74 74 3e 29 3c 2f 74 74 3e 0a 3c 2f  t;*<tt>)</tt>.</
4d50: 74 64 3e 3c 2f 74 72 3e 3c 2f 74 62 6f 64 79 3e  td></tr></tbody>
4d60: 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 0a 0a 3c  </table>..<p>..<
4d70: 2f 70 3e 3c 70 3e 3c 74 74 3e 28 64 65 66 69 6e  /p><p><tt>(defin
4d80: 65 26 6e 62 73 70 3b 70 61 72 73 65 3c 62 72 3e  e&nbsp;parse<br>
4d90: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28 6c  ..&nbsp;&nbsp;(l
4da0: 61 6d 62 64 61 26 6e 62 73 70 3b 28 78 29 3c 62  ambda&nbsp;(x)<b
4db0: 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b  r>..&nbsp;&nbsp;
4dc0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28 64 65 66  &nbsp;&nbsp;(def
4dd0: 69 6e 65 26 6e 62 73 70 3b 50 72 6f 67 3c 62 72  ine&nbsp;Prog<br
4de0: 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  >..&nbsp;&nbsp;&
4df0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
4e00: 3b 26 6e 62 73 70 3b 28 6c 61 6d 62 64 61 26 6e  ;&nbsp;(lambda&n
4e10: 62 73 70 3b 28 78 29 3c 62 72 3e 0a 0a 26 6e 62  bsp;(x)<br>..&nb
4e20: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
4e30: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
4e40: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28 6d 61  ;&nbsp;&nbsp;(ma
4e50: 74 63 68 26 6e 62 73 70 3b 78 3c 62 72 3e 0a 0a  tch&nbsp;x<br>..
4e60: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
4e70: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
4e80: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
4e90: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28 70 72  &nbsp;&nbsp;[(pr
4ea0: 6f 67 72 61 6d 26 6e 62 73 70 3b 2c 5b 53 74 6d  ogram&nbsp;,[Stm
4eb0: 74 26 6e 62 73 70 3b 2d 26 67 74 3b 26 6e 62 73  t&nbsp;-&gt;&nbs
4ec0: 70 3b 73 2a 5d 26 6e 62 73 70 3b 2e 2e 2e 26 6e  p;s*]&nbsp;...&n
4ed0: 62 73 70 3b 2c 5b 45 78 70 72 26 6e 62 73 70 3b  bsp;,[Expr&nbsp;
4ee0: 2d 26 67 74 3b 26 6e 62 73 70 3b 65 5d 29 3c 62  -&gt;&nbsp;e])<b
4ef0: 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b  r>..&nbsp;&nbsp;
4f00: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
4f10: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
4f20: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
4f30: 26 6e 62 73 70 3b 60 28 62 65 67 69 6e 26 6e 62  &nbsp;`(begin&nb
4f40: 73 70 3b 2c 73 2a 26 6e 62 73 70 3b 2e 2e 2e 26  sp;,s*&nbsp;...&
4f50: 6e 62 73 70 3b 2c 65 29 5d 3c 62 72 3e 0a 0a 26  nbsp;,e)]<br>..&
4f60: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
4f70: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
4f80: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
4f90: 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 2c 78 26 6e  nbsp;&nbsp;[,x&n
4fa0: 62 73 70 3b 28 65 72 72 6f 72 26 6e 62 73 70 3b  bsp;(error&nbsp;
4fb0: 27 70 61 72 73 65 26 6e 62 73 70 3b 22 69 6e 76  'parse&nbsp;"inv
4fc0: 61 6c 69 64 26 6e 62 73 70 3b 70 72 6f 67 72 61  alid&nbsp;progra
4fd0: 6d 26 6e 62 73 70 3b 7e 73 22 26 6e 62 73 70 3b  m&nbsp;~s"&nbsp;
4fe0: 78 29 5d 29 29 29 3c 62 72 3e 0a 0a 26 6e 62 73  x)])))<br>..&nbs
4ff0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
5000: 62 73 70 3b 28 64 65 66 69 6e 65 26 6e 62 73 70  bsp;(define&nbsp
5010: 3b 53 74 6d 74 3c 62 72 3e 0a 0a 26 6e 62 73 70  ;Stmt<br>..&nbsp
5020: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
5030: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28  sp;&nbsp;&nbsp;(
5040: 6c 61 6d 62 64 61 26 6e 62 73 70 3b 28 78 29 3c  lambda&nbsp;(x)<
5050: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
5060: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
5070: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
5080: 6e 62 73 70 3b 28 6d 61 74 63 68 26 6e 62 73 70  nbsp;(match&nbsp
5090: 3b 78 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e  ;x<br>..&nbsp;&n
50a0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
50b0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
50c0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
50d0: 62 73 70 3b 5b 28 69 66 26 6e 62 73 70 3b 2c 5b  bsp;[(if&nbsp;,[
50e0: 45 78 70 72 26 6e 62 73 70 3b 2d 26 67 74 3b 26  Expr&nbsp;-&gt;&
50f0: 6e 62 73 70 3b 65 5d 26 6e 62 73 70 3b 2c 5b 53  nbsp;e]&nbsp;,[S
5100: 74 6d 74 26 6e 62 73 70 3b 2d 26 67 74 3b 26 6e  tmt&nbsp;-&gt;&n
5110: 62 73 70 3b 73 31 5d 26 6e 62 73 70 3b 2c 5b 53  bsp;s1]&nbsp;,[S
5120: 74 6d 74 26 6e 62 73 70 3b 2d 26 67 74 3b 26 6e  tmt&nbsp;-&gt;&n
5130: 62 73 70 3b 73 32 5d 29 3c 62 72 3e 0a 0a 26 6e  bsp;s2])<br>..&n
5140: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
5150: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
5160: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
5170: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
5180: 60 28 69 66 26 6e 62 73 70 3b 2c 65 26 6e 62 73  `(if&nbsp;,e&nbs
5190: 70 3b 2c 73 31 26 6e 62 73 70 3b 2c 73 32 29 5d  p;,s1&nbsp;,s2)]
51a0: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
51b0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
51c0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
51d0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
51e0: 70 3b 5b 28 73 65 74 21 26 6e 62 73 70 3b 2c 76  p;[(set!&nbsp;,v
51f0: 26 6e 62 73 70 3b 2c 5b 45 78 70 72 26 6e 62 73  &nbsp;,[Expr&nbs
5200: 70 3b 2d 26 67 74 3b 26 6e 62 73 70 3b 65 5d 29  p;-&gt;&nbsp;e])
5210: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
5220: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
5230: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
5240: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
5250: 70 3b 26 6e 62 73 70 3b 28 67 75 61 72 64 26 6e  p;&nbsp;(guard&n
5260: 62 73 70 3b 28 73 79 6d 62 6f 6c 3f 26 6e 62 73  bsp;(symbol?&nbs
5270: 70 3b 76 29 29 3c 62 72 3e 0a 0a 26 6e 62 73 70  p;v))<br>..&nbsp
5280: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
5290: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
52a0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
52b0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 60 28 73  ;&nbsp;&nbsp;`(s
52c0: 65 74 21 26 6e 62 73 70 3b 2c 76 26 6e 62 73 70  et!&nbsp;,v&nbsp
52d0: 3b 2c 65 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70  ;,e)]<br>..&nbsp
52e0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
52f0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
5300: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
5310: 3b 26 6e 62 73 70 3b 5b 2c 78 26 6e 62 73 70 3b  ;&nbsp;[,x&nbsp;
5320: 28 65 72 72 6f 72 26 6e 62 73 70 3b 27 70 61 72  (error&nbsp;'par
5330: 73 65 26 6e 62 73 70 3b 22 69 6e 76 61 6c 69 64  se&nbsp;"invalid
5340: 26 6e 62 73 70 3b 73 74 61 74 65 6d 65 6e 74 26  &nbsp;statement&
5350: 6e 62 73 70 3b 7e 73 22 26 6e 62 73 70 3b 78 29  nbsp;~s"&nbsp;x)
5360: 5d 29 29 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b  ])))<br>..&nbsp;
5370: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
5380: 70 3b 28 64 65 66 69 6e 65 26 6e 62 73 70 3b 45  p;(define&nbsp;E
5390: 78 70 72 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26  xpr<br>..&nbsp;&
53a0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
53b0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28 6c 61  ;&nbsp;&nbsp;(la
53c0: 6d 62 64 61 26 6e 62 73 70 3b 28 78 29 3c 62 72  mbda&nbsp;(x)<br
53d0: 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  >..&nbsp;&nbsp;&
53e0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
53f0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
5400: 73 70 3b 28 6d 61 74 63 68 26 6e 62 73 70 3b 78  sp;(match&nbsp;x
5410: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
5420: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
5430: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
5440: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
5450: 70 3b 5b 2c 76 26 6e 62 73 70 3b 28 67 75 61 72  p;[,v&nbsp;(guar
5460: 64 26 6e 62 73 70 3b 28 73 79 6d 62 6f 6c 3f 26  d&nbsp;(symbol?&
5470: 6e 62 73 70 3b 76 29 29 26 6e 62 73 70 3b 76 5d  nbsp;v))&nbsp;v]
5480: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
5490: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
54a0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
54b0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
54c0: 70 3b 5b 2c 6e 26 6e 62 73 70 3b 28 67 75 61 72  p;[,n&nbsp;(guar
54d0: 64 26 6e 62 73 70 3b 28 69 6e 74 65 67 65 72 3f  d&nbsp;(integer?
54e0: 26 6e 62 73 70 3b 6e 29 29 26 6e 62 73 70 3b 6e  &nbsp;n))&nbsp;n
54f0: 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  ]<br>..&nbsp;&nb
5500: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
5510: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
5520: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
5530: 73 70 3b 5b 28 69 66 26 6e 62 73 70 3b 2c 5b 65  sp;[(if&nbsp;,[e
5540: 31 5d 26 6e 62 73 70 3b 2c 5b 65 32 5d 26 6e 62  1]&nbsp;,[e2]&nb
5550: 73 70 3b 2c 5b 65 33 5d 29 3c 62 72 3e 0a 0a 26  sp;,[e3])<br>..&
5560: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
5570: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
5580: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
5590: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
55a0: 3b 60 28 69 66 26 6e 62 73 70 3b 2c 65 31 26 6e  ;`(if&nbsp;,e1&n
55b0: 62 73 70 3b 2c 65 32 26 6e 62 73 70 3b 2c 65 33  bsp;,e2&nbsp;,e3
55c0: 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e  )]<br>..&nbsp;&n
55d0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
55e0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
55f0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
5600: 62 73 70 3b 5b 28 2c 5b 72 61 74 6f 72 5d 26 6e  bsp;[(,[rator]&n
5610: 62 73 70 3b 2c 5b 72 61 6e 64 2a 5d 26 6e 62 73  bsp;,[rand*]&nbs
5620: 70 3b 2e 2e 2e 29 26 6e 62 73 70 3b 60 28 2c 72  p;...)&nbsp;`(,r
5630: 61 74 6f 72 26 6e 62 73 70 3b 2c 72 61 6e 64 2a  ator&nbsp;,rand*
5640: 26 6e 62 73 70 3b 2e 2e 2e 29 5d 3c 62 72 3e 0a  &nbsp;...)]<br>.
5650: 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  .&nbsp;&nbsp;&nb
5660: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
5670: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
5680: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 2c 78  ;&nbsp;&nbsp;[,x
5690: 26 6e 62 73 70 3b 28 65 72 72 6f 72 26 6e 62 73  &nbsp;(error&nbs
56a0: 70 3b 27 70 61 72 73 65 26 6e 62 73 70 3b 22 69  p;'parse&nbsp;"i
56b0: 6e 76 61 6c 69 64 26 6e 62 73 70 3b 65 78 70 72  nvalid&nbsp;expr
56c0: 65 73 73 69 6f 6e 26 6e 62 73 70 3b 7e 73 22 26  ession&nbsp;~s"&
56d0: 6e 62 73 70 3b 78 29 5d 29 29 29 3c 62 72 3e 0a  nbsp;x)])))<br>.
56e0: 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  .&nbsp;&nbsp;&nb
56f0: 73 70 3b 26 6e 62 73 70 3b 28 50 72 6f 67 26 6e  sp;&nbsp;(Prog&n
5700: 62 73 70 3b 78 29 29 29 0a 3c 62 72 3e 0a 3c 62  bsp;x))).<br>.<b
5710: 72 3e 0a 28 70 61 72 73 65 26 6e 62 73 70 3b 27  r>.(parse&nbsp;'
5720: 28 70 72 6f 67 72 61 6d 26 6e 62 73 70 3b 28 73  (program&nbsp;(s
5730: 65 74 21 26 6e 62 73 70 3b 78 26 6e 62 73 70 3b  et!&nbsp;x&nbsp;
5740: 33 29 26 6e 62 73 70 3b 28 2b 26 6e 62 73 70 3b  3)&nbsp;(+&nbsp;
5750: 78 26 6e 62 73 70 3b 34 29 29 29 26 6e 62 73 70  x&nbsp;4)))&nbsp
5760: 3b 3c 69 6d 67 20 73 72 63 3d 22 6d 61 74 63 68  ;<img src="match
5770: 5f 66 69 6c 65 73 2f 30 2e 67 69 66 22 20 61 6c  _files/0.gif" al
5780: 74 3d 22 26 6c 74 3b 67 72 61 70 68 69 63 26 67  t="&lt;graphic&g
5790: 74 3b 22 3e 26 6e 62 73 70 3b 28 62 65 67 69 6e  t;">&nbsp;(begin
57a0: 26 6e 62 73 70 3b 28 73 65 74 21 26 6e 62 73 70  &nbsp;(set!&nbsp
57b0: 3b 78 26 6e 62 73 70 3b 33 29 26 6e 62 73 70 3b  ;x&nbsp;3)&nbsp;
57c0: 28 2b 26 6e 62 73 70 3b 78 26 6e 62 73 70 3b 34  (+&nbsp;x&nbsp;4
57d0: 29 29 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c 70 3e 41  ))</tt>.</p><p>A
57e0: 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65   mentioned above
57f0: 2c 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 73  , the operator s
5800: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
5810: 63 61 74 61 20 73 79 6e 74 61 78 20 63 61 6e 20  cata syntax can 
5820: 62 65 20 61 6e 79 0a 65 78 70 72 65 73 73 69 6f  be any.expressio
5830: 6e 2e 0a 57 65 20 63 61 6e 20 6d 61 6b 65 20 75  n..We can make u
5840: 73 65 20 6f 66 20 74 68 69 73 20 74 6f 20 70 61  se of this to pa
5850: 73 73 20 61 6c 6f 6e 67 20 61 6e 20 65 6e 76 69  ss along an envi
5860: 72 6f 6e 6d 65 6e 74 2c 20 69 66 20 6e 65 65 64  ronment, if need
5870: 65 64 2c 20 73 61 79 0a 74 6f 20 68 61 6e 64 6c  ed, say.to handl
5880: 65 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  e a version of t
5890: 68 65 20 6c 61 6e 67 75 61 67 65 20 61 62 6f 76  he language abov
58a0: 65 20 65 78 74 65 6e 64 65 64 20 77 69 74 68 20  e extended with 
58b0: 61 0a 3c 74 74 3e 6c 65 74 3c 2f 74 74 3e 20 65  a.<tt>let</tt> e
58c0: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63  xpression that c
58d0: 72 65 61 74 65 73 20 62 69 6e 64 69 6e 67 73 20  reates bindings 
58e0: 74 68 61 74 20 6d 69 67 68 74 20 73 68 61 64 6f  that might shado
58f0: 77 20 6b 65 79 77 6f 72 64 73 2e 0a 0a 3c 2f 70  w keywords...</p
5900: 3e 3c 70 3e 0a 0a 20 20 0a 20 20 0a 20 20 0a 20  ><p>..  .  .  . 
5910: 20 3c 2f 70 3e 3c 74 61 62 6c 65 3e 3c 74 62 6f   </p><table><tbo
5920: 64 79 3e 3c 74 72 3e 3c 74 64 20 6e 6f 77 72 61  dy><tr><td nowra
5930: 70 3d 22 6e 6f 77 72 61 70 22 3e 0a 26 6c 74 3b  p="nowrap">.&lt;
5940: 50 72 6f 67 26 67 74 3b 3c 2f 74 64 3e 3c 74 64  Prog&gt;</td><td
5950: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
5960: 3c 69 6d 67 20 73 72 63 3d 22 6d 61 74 63 68 5f  <img src="match_
5970: 66 69 6c 65 73 2f 31 2e 67 69 66 22 20 61 6c 74  files/1.gif" alt
5980: 3d 22 26 6c 74 3b 67 72 61 70 68 69 63 26 67 74  ="&lt;graphic&gt
5990: 3b 22 3e 3c 2f 74 64 3e 3c 74 64 20 6e 6f 77 72  ;"></td><td nowr
59a0: 61 70 3d 22 6e 6f 77 72 61 70 22 3e 3c 74 74 3e  ap="nowrap"><tt>
59b0: 28 70 72 6f 67 72 61 6d 3c 2f 74 74 3e 20 26 6c  (program</tt> &l
59c0: 74 3b 53 74 6d 74 26 67 74 3b 2a 20 26 6c 74 3b  t;Stmt&gt;* &lt;
59d0: 45 78 70 72 26 67 74 3b 3c 74 74 3e 29 3c 2f 74  Expr&gt;<tt>)</t
59e0: 74 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 74 72 3e  t></td></tr><tr>
59f0: 3c 74 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77 72  <td nowrap="nowr
5a00: 61 70 22 3e 0a 26 6c 74 3b 53 74 6d 74 26 67 74  ap">.&lt;Stmt&gt
5a10: 3b 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d  ;</td><td align=
5a20: 22 63 65 6e 74 65 72 22 3e 3c 69 6d 67 20 73 72  "center"><img sr
5a30: 63 3d 22 6d 61 74 63 68 5f 66 69 6c 65 73 2f 31  c="match_files/1
5a40: 2e 67 69 66 22 20 61 6c 74 3d 22 26 6c 74 3b 67  .gif" alt="&lt;g
5a50: 72 61 70 68 69 63 26 67 74 3b 22 3e 3c 2f 74 64  raphic&gt;"></td
5a60: 3e 3c 74 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77  ><td nowrap="now
5a70: 72 61 70 22 3e 3c 74 74 3e 28 69 66 3c 2f 74 74  rap"><tt>(if</tt
5a80: 3e 20 26 6c 74 3b 45 78 70 72 26 67 74 3b 20 26  > &lt;Expr&gt; &
5a90: 6c 74 3b 53 74 6d 74 26 67 74 3b 20 26 6c 74 3b  lt;Stmt&gt; &lt;
5aa0: 53 74 6d 74 26 67 74 3b 3c 74 74 3e 29 3c 2f 74  Stmt&gt;<tt>)</t
5ab0: 74 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 74 72 3e  t></td></tr><tr>
5ac0: 3c 74 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77 72  <td nowrap="nowr
5ad0: 61 70 22 3e 0a 20 20 20 20 20 20 20 20 20 20 3c  ap">.          <
5ae0: 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63  /td><td align="c
5af0: 65 6e 74 65 72 22 3e 7c 3c 2f 74 64 3e 3c 74 64  enter">|</td><td
5b00: 20 6e 6f 77 72 61 70 3d 22 6e 6f 77 72 61 70 22   nowrap="nowrap"
5b10: 3e 3c 74 74 3e 28 73 65 74 21 3c 2f 74 74 3e 20  ><tt>(set!</tt> 
5b20: 26 6c 74 3b 76 61 72 26 67 74 3b 20 26 6c 74 3b  &lt;var&gt; &lt;
5b30: 45 78 70 72 26 67 74 3b 3c 74 74 3e 29 3c 2f 74  Expr&gt;<tt>)</t
5b40: 74 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 74 72 3e  t></td></tr><tr>
5b50: 3c 74 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77 72  <td nowrap="nowr
5b60: 61 70 22 3e 0a 26 6c 74 3b 45 78 70 72 26 67 74  ap">.&lt;Expr&gt
5b70: 3b 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d  ;</td><td align=
5b80: 22 63 65 6e 74 65 72 22 3e 3c 69 6d 67 20 73 72  "center"><img sr
5b90: 63 3d 22 6d 61 74 63 68 5f 66 69 6c 65 73 2f 31  c="match_files/1
5ba0: 2e 67 69 66 22 20 61 6c 74 3d 22 26 6c 74 3b 67  .gif" alt="&lt;g
5bb0: 72 61 70 68 69 63 26 67 74 3b 22 3e 3c 2f 74 64  raphic&gt;"></td
5bc0: 3e 3c 74 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77  ><td nowrap="now
5bd0: 72 61 70 22 3e 26 6c 74 3b 76 61 72 26 67 74 3b  rap">&lt;var&gt;
5be0: 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 74 72 3e 3c 74  </td></tr><tr><t
5bf0: 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77 72 61 70  d nowrap="nowrap
5c00: 22 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 2f 74  ">.          </t
5c10: 64 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  d><td align="cen
5c20: 74 65 72 22 3e 7c 3c 2f 74 64 3e 3c 74 64 20 6e  ter">|</td><td n
5c30: 6f 77 72 61 70 3d 22 6e 6f 77 72 61 70 22 3e 26  owrap="nowrap">&
5c40: 6c 74 3b 69 6e 74 65 67 65 72 26 67 74 3b 3c 2f  lt;integer&gt;</
5c50: 74 64 3e 3c 2f 74 72 3e 3c 74 72 3e 3c 74 64 20  td></tr><tr><td 
5c60: 6e 6f 77 72 61 70 3d 22 6e 6f 77 72 61 70 22 3e  nowrap="nowrap">
5c70: 0a 20 20 20 20 20 20 20 20 20 20 3c 2f 74 64 3e  .          </td>
5c80: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
5c90: 72 22 3e 7c 3c 2f 74 64 3e 3c 74 64 20 6e 6f 77  r">|</td><td now
5ca0: 72 61 70 3d 22 6e 6f 77 72 61 70 22 3e 3c 74 74  rap="nowrap"><tt
5cb0: 3e 28 69 66 3c 2f 74 74 3e 20 26 6c 74 3b 45 78  >(if</tt> &lt;Ex
5cc0: 70 72 26 67 74 3b 20 26 6c 74 3b 45 78 70 72 26  pr&gt; &lt;Expr&
5cd0: 67 74 3b 20 26 6c 74 3b 45 78 70 72 26 67 74 3b  gt; &lt;Expr&gt;
5ce0: 3c 74 74 3e 29 3c 2f 74 74 3e 3c 2f 74 64 3e 3c  <tt>)</tt></td><
5cf0: 2f 74 72 3e 3c 74 72 3e 3c 74 64 20 6e 6f 77 72  /tr><tr><td nowr
5d00: 61 70 3d 22 6e 6f 77 72 61 70 22 3e 0a 20 20 20  ap="nowrap">.   
5d10: 20 20 20 20 20 20 20 3c 2f 74 64 3e 3c 74 64 20         </td><td 
5d20: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 7c  align="center">|
5d30: 3c 2f 74 64 3e 3c 74 64 20 6e 6f 77 72 61 70 3d  </td><td nowrap=
5d40: 22 6e 6f 77 72 61 70 22 3e 3c 74 74 3e 28 6c 65  "nowrap"><tt>(le
5d50: 74 3c 2f 74 74 3e 20 3c 74 74 3e 28 28 3c 2f 74  t</tt> <tt>((</t
5d60: 74 3e 3c 74 74 3e 3c 69 3e 76 61 72 3c 2f 69 3e  t><tt><i>var</i>
5d70: 3c 2f 74 74 3e 20 26 6c 74 3b 45 78 70 72 26 67  </tt> &lt;Expr&g
5d80: 74 3b 3c 74 74 3e 29 29 3c 2f 74 74 3e 20 26 6c  t;<tt>))</tt> &l
5d90: 74 3b 45 78 70 72 26 67 74 3b 3c 74 74 3e 29 3c  t;Expr&gt;<tt>)<
5da0: 2f 74 74 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 74  /tt></td></tr><t
5db0: 72 3e 3c 74 64 20 6e 6f 77 72 61 70 3d 22 6e 6f  r><td nowrap="no
5dc0: 77 72 61 70 22 3e 0a 20 20 20 20 20 20 20 20 20  wrap">.         
5dd0: 20 3c 2f 74 64 3e 3c 74 64 20 61 6c 69 67 6e 3d   </td><td align=
5de0: 22 63 65 6e 74 65 72 22 3e 7c 3c 2f 74 64 3e 3c  "center">|</td><
5df0: 74 64 20 6e 6f 77 72 61 70 3d 22 6e 6f 77 72 61  td nowrap="nowra
5e00: 70 22 3e 3c 74 74 3e 28 3c 2f 74 74 3e 26 6c 74  p"><tt>(</tt>&lt
5e10: 3b 45 78 70 72 26 67 74 3b 20 26 6c 74 3b 45 78  ;Expr&gt; &lt;Ex
5e20: 70 72 26 67 74 3b 2a 3c 74 74 3e 29 3c 2f 74 74  pr&gt;*<tt>)</tt
5e30: 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 62  >.</td></tr></tb
5e40: 6f 64 79 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70  ody></table>..<p
5e50: 3e 0a 49 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  >.In the followi
5e60: 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 3c 74  ng version of <t
5e70: 74 3e 70 61 72 73 65 3c 2f 74 74 3e 2c 20 74 68  t>parse</tt>, th
5e80: 65 20 6f 75 74 70 75 74 20 69 73 20 6d 6f 72 65  e output is more
5e90: 20 73 74 72 75 63 74 75 72 65 64 2c 0a 77 69 74   structured,.wit
5ea0: 68 20 61 6e 20 65 78 70 6c 69 63 69 74 20 3c 74  h an explicit <t
5eb0: 74 3e 63 61 6c 6c 3c 2f 74 74 3e 20 6b 65 79 77  t>call</tt> keyw
5ec0: 6f 72 64 20 73 6f 20 74 68 61 74 20 74 68 65 72  ord so that ther
5ed0: 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 61 6e  e will not be an
5ee0: 79 0a 63 6f 6e 66 75 73 69 6f 6e 20 69 6e 20 74  y.confusion in t
5ef0: 68 65 20 6f 75 74 70 75 74 20 62 65 74 77 65 65  he output betwee
5f00: 6e 20 61 20 63 61 6c 6c 20 74 6f 20 74 68 65 20  n a call to the 
5f10: 76 61 6c 75 65 20 6f 66 20 61 6e 20 3c 74 74 3e  value of an <tt>
5f20: 69 66 3c 2f 74 74 3e 0a 76 61 72 69 61 62 6c 65  if</tt>.variable
5f30: 20 61 6e 64 20 61 20 3c 74 74 3e 69 66 3c 2f 74   and a <tt>if</t
5f40: 74 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 6b 65  t> expression ke
5f50: 79 65 64 20 62 79 20 74 68 65 20 3c 74 74 3e 69  yed by the <tt>i
5f60: 66 3c 2f 74 74 3e 20 6b 65 79 77 6f 72 64 2e 0a  f</tt> keyword..
5f70: 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c 70  .</p><p>..</p><p
5f80: 3e 3c 74 74 3e 28 64 65 66 69 6e 65 26 6e 62 73  ><tt>(define&nbs
5f90: 70 3b 70 61 72 73 65 3c 62 72 3e 0a 0a 26 6e 62  p;parse<br>..&nb
5fa0: 73 70 3b 26 6e 62 73 70 3b 28 6c 61 6d 62 64 61  sp;&nbsp;(lambda
5fb0: 26 6e 62 73 70 3b 28 78 29 3c 62 72 3e 0a 0a 26  &nbsp;(x)<br>..&
5fc0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
5fd0: 3b 26 6e 62 73 70 3b 28 64 65 66 69 6e 65 26 6e  ;&nbsp;(define&n
5fe0: 62 73 70 3b 50 72 6f 67 3c 62 72 3e 0a 0a 26 6e  bsp;Prog<br>..&n
5ff0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6000: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6010: 70 3b 28 6c 61 6d 62 64 61 26 6e 62 73 70 3b 28  p;(lambda&nbsp;(
6020: 78 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e  x)<br>..&nbsp;&n
6030: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6040: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6050: 70 3b 26 6e 62 73 70 3b 28 6d 61 74 63 68 26 6e  p;&nbsp;(match&n
6060: 62 73 70 3b 78 3c 62 72 3e 0a 0a 26 6e 62 73 70  bsp;x<br>..&nbsp
6070: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6080: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6090: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
60a0: 3b 26 6e 62 73 70 3b 5b 28 70 72 6f 67 72 61 6d  ;&nbsp;[(program
60b0: 26 6e 62 73 70 3b 2c 5b 53 74 6d 74 26 6e 62 73  &nbsp;,[Stmt&nbs
60c0: 70 3b 2d 26 67 74 3b 26 6e 62 73 70 3b 73 2a 5d  p;-&gt;&nbsp;s*]
60d0: 26 6e 62 73 70 3b 2e 2e 2e 26 6e 62 73 70 3b 2c  &nbsp;...&nbsp;,
60e0: 5b 28 45 78 70 72 26 6e 62 73 70 3b 27 28 29 29  [(Expr&nbsp;'())
60f0: 26 6e 62 73 70 3b 2d 26 67 74 3b 26 6e 62 73 70  &nbsp;-&gt;&nbsp
6100: 3b 65 5d 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b  ;e])<br>..&nbsp;
6110: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6120: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
6130: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6140: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 60 28 62 65  &nbsp;&nbsp;`(be
6150: 67 69 6e 26 6e 62 73 70 3b 2c 73 2a 26 6e 62 73  gin&nbsp;,s*&nbs
6160: 70 3b 2e 2e 2e 26 6e 62 73 70 3b 2c 65 29 5d 3c  p;...&nbsp;,e)]<
6170: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
6180: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6190: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
61a0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
61b0: 3b 5b 2c 78 26 6e 62 73 70 3b 28 65 72 72 6f 72  ;[,x&nbsp;(error
61c0: 26 6e 62 73 70 3b 27 70 61 72 73 65 26 6e 62 73  &nbsp;'parse&nbs
61d0: 70 3b 22 69 6e 76 61 6c 69 64 26 6e 62 73 70 3b  p;"invalid&nbsp;
61e0: 70 72 6f 67 72 61 6d 26 6e 62 73 70 3b 7e 73 22  program&nbsp;~s"
61f0: 26 6e 62 73 70 3b 78 29 5d 29 29 29 3c 62 72 3e  &nbsp;x)])))<br>
6200: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  ..&nbsp;&nbsp;&n
6210: 62 73 70 3b 26 6e 62 73 70 3b 28 64 65 66 69 6e  bsp;&nbsp;(defin
6220: 65 26 6e 62 73 70 3b 53 74 6d 74 3c 62 72 3e 0a  e&nbsp;Stmt<br>.
6230: 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  .&nbsp;&nbsp;&nb
6240: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6250: 6e 62 73 70 3b 28 6c 61 6d 62 64 61 26 6e 62 73  nbsp;(lambda&nbs
6260: 70 3b 28 78 29 3c 62 72 3e 0a 0a 26 6e 62 73 70  p;(x)<br>..&nbsp
6270: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6280: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6290: 6e 62 73 70 3b 26 6e 62 73 70 3b 28 6d 61 74 63  nbsp;&nbsp;(matc
62a0: 68 26 6e 62 73 70 3b 78 3c 62 72 3e 0a 0a 26 6e  h&nbsp;x<br>..&n
62b0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
62c0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
62d0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
62e0: 62 73 70 3b 26 6e 62 73 70 3b 5b 28 69 66 26 6e  bsp;&nbsp;[(if&n
62f0: 62 73 70 3b 2c 5b 28 45 78 70 72 26 6e 62 73 70  bsp;,[(Expr&nbsp
6300: 3b 27 28 29 29 26 6e 62 73 70 3b 2d 26 67 74 3b  ;'())&nbsp;-&gt;
6310: 26 6e 62 73 70 3b 65 5d 26 6e 62 73 70 3b 2c 5b  &nbsp;e]&nbsp;,[
6320: 53 74 6d 74 26 6e 62 73 70 3b 2d 26 67 74 3b 26  Stmt&nbsp;-&gt;&
6330: 6e 62 73 70 3b 73 31 5d 26 6e 62 73 70 3b 2c 5b  nbsp;s1]&nbsp;,[
6340: 53 74 6d 74 26 6e 62 73 70 3b 2d 26 67 74 3b 26  Stmt&nbsp;-&gt;&
6350: 6e 62 73 70 3b 73 32 5d 29 3c 62 72 3e 0a 0a 26  nbsp;s2])<br>..&
6360: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
6370: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6380: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6390: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
63a0: 3b 60 28 69 66 26 6e 62 73 70 3b 2c 65 26 6e 62  ;`(if&nbsp;,e&nb
63b0: 73 70 3b 2c 73 31 26 6e 62 73 70 3b 2c 73 32 29  sp;,s1&nbsp;,s2)
63c0: 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  ]<br>..&nbsp;&nb
63d0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
63e0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
63f0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6400: 73 70 3b 5b 28 73 65 74 21 26 6e 62 73 70 3b 2c  sp;[(set!&nbsp;,
6410: 76 26 6e 62 73 70 3b 2c 5b 28 45 78 70 72 26 6e  v&nbsp;,[(Expr&n
6420: 62 73 70 3b 27 28 29 29 26 6e 62 73 70 3b 2d 26  bsp;'())&nbsp;-&
6430: 67 74 3b 26 6e 62 73 70 3b 65 5d 29 3c 62 72 3e  gt;&nbsp;e])<br>
6440: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  ..&nbsp;&nbsp;&n
6450: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6460: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6470: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
6480: 62 73 70 3b 28 67 75 61 72 64 26 6e 62 73 70 3b  bsp;(guard&nbsp;
6490: 28 73 79 6d 62 6f 6c 3f 26 6e 62 73 70 3b 76 29  (symbol?&nbsp;v)
64a0: 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  )<br>..&nbsp;&nb
64b0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
64c0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
64d0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
64e0: 73 70 3b 26 6e 62 73 70 3b 60 28 73 65 74 21 26  sp;&nbsp;`(set!&
64f0: 6e 62 73 70 3b 2c 76 26 6e 62 73 70 3b 2c 65 29  nbsp;,v&nbsp;,e)
6500: 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  ]<br>..&nbsp;&nb
6510: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6520: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
6530: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6540: 73 70 3b 5b 2c 78 26 6e 62 73 70 3b 28 65 72 72  sp;[,x&nbsp;(err
6550: 6f 72 26 6e 62 73 70 3b 27 70 61 72 73 65 26 6e  or&nbsp;'parse&n
6560: 62 73 70 3b 22 69 6e 76 61 6c 69 64 26 6e 62 73  bsp;"invalid&nbs
6570: 70 3b 73 74 61 74 65 6d 65 6e 74 26 6e 62 73 70  p;statement&nbsp
6580: 3b 7e 73 22 26 6e 62 73 70 3b 78 29 5d 29 29 29  ;~s"&nbsp;x)])))
6590: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
65a0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28 64  p;&nbsp;&nbsp;(d
65b0: 65 66 69 6e 65 26 6e 62 73 70 3b 45 78 70 72 3c  efine&nbsp;Expr<
65c0: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
65d0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
65e0: 73 70 3b 26 6e 62 73 70 3b 28 6c 61 6d 62 64 61  sp;&nbsp;(lambda
65f0: 26 6e 62 73 70 3b 28 65 6e 76 29 3c 62 72 3e 0a  &nbsp;(env)<br>.
6600: 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  .&nbsp;&nbsp;&nb
6610: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6620: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
6630: 3b 28 6c 61 6d 62 64 61 26 6e 62 73 70 3b 28 78  ;(lambda&nbsp;(x
6640: 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  )<br>..&nbsp;&nb
6650: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6660: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
6670: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6680: 73 70 3b 28 6d 61 74 63 68 26 6e 62 73 70 3b 78  sp;(match&nbsp;x
6690: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
66a0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
66b0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
66c0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
66d0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 2c  p;&nbsp;&nbsp;[,
66e0: 76 26 6e 62 73 70 3b 28 67 75 61 72 64 26 6e 62  v&nbsp;(guard&nb
66f0: 73 70 3b 28 73 79 6d 62 6f 6c 3f 26 6e 62 73 70  sp;(symbol?&nbsp
6700: 3b 76 29 29 26 6e 62 73 70 3b 76 5d 3c 62 72 3e  ;v))&nbsp;v]<br>
6710: 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  ..&nbsp;&nbsp;&n
6720: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6730: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6740: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
6750: 62 73 70 3b 26 6e 62 73 70 3b 5b 2c 6e 26 6e 62  bsp;&nbsp;[,n&nb
6760: 73 70 3b 28 67 75 61 72 64 26 6e 62 73 70 3b 28  sp;(guard&nbsp;(
6770: 69 6e 74 65 67 65 72 3f 26 6e 62 73 70 3b 6e 29  integer?&nbsp;n)
6780: 29 26 6e 62 73 70 3b 6e 5d 3c 62 72 3e 0a 0a 26  )&nbsp;n]<br>..&
6790: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
67a0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
67b0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
67c0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
67d0: 3b 26 6e 62 73 70 3b 5b 28 69 66 26 6e 62 73 70  ;&nbsp;[(if&nbsp
67e0: 3b 2c 5b 65 31 5d 26 6e 62 73 70 3b 2c 5b 65 32  ;,[e1]&nbsp;,[e2
67f0: 5d 26 6e 62 73 70 3b 2c 5b 65 33 5d 29 3c 62 72  ]&nbsp;,[e3])<br
6800: 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  >..&nbsp;&nbsp;&
6810: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
6820: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6830: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6840: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
6850: 3b 28 67 75 61 72 64 26 6e 62 73 70 3b 28 6e 6f  ;(guard&nbsp;(no
6860: 74 26 6e 62 73 70 3b 28 6d 65 6d 71 26 6e 62 73  t&nbsp;(memq&nbs
6870: 70 3b 27 69 66 26 6e 62 73 70 3b 65 6e 76 29 29  p;'if&nbsp;env))
6880: 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  )<br>..&nbsp;&nb
6890: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
68a0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
68b0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
68c0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
68d0: 6e 62 73 70 3b 60 28 69 66 26 6e 62 73 70 3b 2c  nbsp;`(if&nbsp;,
68e0: 65 31 26 6e 62 73 70 3b 2c 65 32 26 6e 62 73 70  e1&nbsp;,e2&nbsp
68f0: 3b 2c 65 33 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73  ;,e3)]<br>..&nbs
6900: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
6910: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6920: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6930: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
6940: 62 73 70 3b 5b 28 6c 65 74 26 6e 62 73 70 3b 28  bsp;[(let&nbsp;(
6950: 5b 2c 76 26 6e 62 73 70 3b 2c 5b 65 5d 5d 29 26  [,v&nbsp;,[e]])&
6960: 6e 62 73 70 3b 2c 5b 28 45 78 70 72 26 6e 62 73  nbsp;,[(Expr&nbs
6970: 70 3b 28 63 6f 6e 73 26 6e 62 73 70 3b 76 26 6e  p;(cons&nbsp;v&n
6980: 62 73 70 3b 65 6e 76 29 29 26 6e 62 73 70 3b 2d  bsp;env))&nbsp;-
6990: 26 67 74 3b 26 6e 62 73 70 3b 62 6f 64 79 5d 29  &gt;&nbsp;body])
69a0: 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73  <br>..&nbsp;&nbs
69b0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
69c0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
69d0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
69e0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
69f0: 62 73 70 3b 28 67 75 61 72 64 26 6e 62 73 70 3b  bsp;(guard&nbsp;
6a00: 28 6e 6f 74 26 6e 62 73 70 3b 28 6d 65 6d 71 26  (not&nbsp;(memq&
6a10: 6e 62 73 70 3b 27 6c 65 74 26 6e 62 73 70 3b 65  nbsp;'let&nbsp;e
6a20: 6e 76 29 29 26 6e 62 73 70 3b 28 73 79 6d 62 6f  nv))&nbsp;(symbo
6a30: 6c 3f 26 6e 62 73 70 3b 76 29 29 3c 62 72 3e 0a  l?&nbsp;v))<br>.
6a40: 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  .&nbsp;&nbsp;&nb
6a50: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6a60: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
6a70: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6a80: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 60  sp;&nbsp;&nbsp;`
6a90: 28 6c 65 74 26 6e 62 73 70 3b 28 5b 2c 76 26 6e  (let&nbsp;([,v&n
6aa0: 62 73 70 3b 2c 65 5d 29 26 6e 62 73 70 3b 2c 62  bsp;,e])&nbsp;,b
6ab0: 6f 64 79 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70  ody)]<br>..&nbsp
6ac0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6ad0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6ae0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
6af0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6b00: 73 70 3b 5b 28 2c 5b 72 61 74 6f 72 5d 26 6e 62  sp;[(,[rator]&nb
6b10: 73 70 3b 2c 5b 72 61 6e 64 2a 5d 26 6e 62 73 70  sp;,[rand*]&nbsp
6b20: 3b 2e 2e 2e 29 3c 62 72 3e 0a 0a 26 6e 62 73 70  ;...)<br>..&nbsp
6b30: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6b40: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
6b50: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
6b60: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6b70: 73 70 3b 26 6e 62 73 70 3b 60 28 63 61 6c 6c 26  sp;&nbsp;`(call&
6b80: 6e 62 73 70 3b 2c 72 61 74 6f 72 26 6e 62 73 70  nbsp;,rator&nbsp
6b90: 3b 2c 72 61 6e 64 2a 26 6e 62 73 70 3b 2e 2e 2e  ;,rand*&nbsp;...
6ba0: 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e  )]<br>..&nbsp;&n
6bb0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6bc0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6bd0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
6be0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6bf0: 5b 2c 78 26 6e 62 73 70 3b 28 65 72 72 6f 72 26  [,x&nbsp;(error&
6c00: 6e 62 73 70 3b 27 70 61 72 73 65 26 6e 62 73 70  nbsp;'parse&nbsp
6c10: 3b 22 69 6e 76 61 6c 69 64 26 6e 62 73 70 3b 65  ;"invalid&nbsp;e
6c20: 78 70 72 65 73 73 69 6f 6e 26 6e 62 73 70 3b 7e  xpression&nbsp;~
6c30: 73 22 26 6e 62 73 70 3b 78 29 5d 29 29 29 29 3c  s"&nbsp;x)]))))<
6c40: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
6c50: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28 50 72  ;&nbsp;&nbsp;(Pr
6c60: 6f 67 26 6e 62 73 70 3b 78 29 29 29 0a 3c 62 72  og&nbsp;x))).<br
6c70: 3e 0a 3c 62 72 3e 0a 28 70 61 72 73 65 3c 62 72  >.<br>.(parse<br
6c80: 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 27  >..&nbsp;&nbsp;'
6c90: 28 70 72 6f 67 72 61 6d 26 6e 62 73 70 3b 26 6e  (program&nbsp;&n
6ca0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6cb0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6cc0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
6cd0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6ce0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6cf0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
6d00: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6d10: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6d20: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 3c 69  p;&nbsp;&nbsp;<i
6d30: 6d 67 20 73 72 63 3d 22 6d 61 74 63 68 5f 66 69  mg src="match_fi
6d40: 6c 65 73 2f 67 68 6f 73 74 52 69 67 68 74 61 72  les/ghostRightar
6d50: 72 6f 77 2e 67 69 66 22 3e 26 6e 62 73 70 3b 28  row.gif">&nbsp;(
6d60: 62 65 67 69 6e 3c 62 72 3e 0a 0a 26 6e 62 73 70  begin<br>..&nbsp
6d70: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
6d80: 73 70 3b 26 6e 62 73 70 3b 28 6c 65 74 26 6e 62  sp;&nbsp;(let&nb
6d90: 73 70 3b 28 5b 69 66 26 6e 62 73 70 3b 28 69 66  sp;([if&nbsp;(if
6da0: 26 6e 62 73 70 3b 78 26 6e 62 73 70 3b 6c 69 73  &nbsp;x&nbsp;lis
6db0: 74 26 6e 62 73 70 3b 76 61 6c 75 65 73 29 5d 29  t&nbsp;values)])
6dc0: 26 6e 62 73 70 3b 3c 69 6d 67 20 73 72 63 3d 22  &nbsp;<img src="
6dd0: 6d 61 74 63 68 5f 66 69 6c 65 73 2f 30 2e 67 69  match_files/0.gi
6de0: 66 22 20 61 6c 74 3d 22 26 6c 74 3b 67 72 61 70  f" alt="&lt;grap
6df0: 68 69 63 26 67 74 3b 22 3e 26 6e 62 73 70 3b 26  hic&gt;">&nbsp;&
6e00: 6e 62 73 70 3b 26 6e 62 73 70 3b 28 6c 65 74 26  nbsp;&nbsp;(let&
6e10: 6e 62 73 70 3b 28 5b 69 66 26 6e 62 73 70 3b 28  nbsp;([if&nbsp;(
6e20: 69 66 26 6e 62 73 70 3b 78 26 6e 62 73 70 3b 6c  if&nbsp;x&nbsp;l
6e30: 69 73 74 26 6e 62 73 70 3b 76 61 6c 75 65 73 29  ist&nbsp;values)
6e40: 5d 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e  ])<br>..&nbsp;&n
6e50: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6e60: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6e70: 70 3b 28 69 66 26 6e 62 73 70 3b 31 26 6e 62 73  p;(if&nbsp;1&nbs
6e80: 70 3b 32 26 6e 62 73 70 3b 33 29 29 29 29 26 6e  p;2&nbsp;3))))&n
6e90: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6ea0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6eb0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
6ec0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
6ed0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
6ee0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 3c 69  p;&nbsp;&nbsp;<i
6ef0: 6d 67 20 73 72 63 3d 22 6d 61 74 63 68 5f 66 69  mg src="match_fi
6f00: 6c 65 73 2f 67 68 6f 73 74 52 69 67 68 74 61 72  les/ghostRightar
6f10: 72 6f 77 2e 67 69 66 22 3e 26 6e 62 73 70 3b 26  row.gif">&nbsp;&
6f20: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
6f30: 3b 26 6e 62 73 70 3b 28 63 61 6c 6c 26 6e 62 73  ;&nbsp;(call&nbs
6f40: 70 3b 69 66 26 6e 62 73 70 3b 31 26 6e 62 73 70  p;if&nbsp;1&nbsp
6f50: 3b 32 26 6e 62 73 70 3b 33 29 29 29 3c 2f 74 74  ;2&nbsp;3)))</tt
6f60: 3e 0a 3c 2f 70 3e 3c 70 3e 57 68 65 6e 20 72 65  >.</p><p>When re
6f70: 63 75 72 72 69 6e 67 20 76 69 61 20 61 20 63 61  curring via a ca
6f80: 74 61 20 63 61 6c 6c 20 77 69 74 68 6f 75 74 20  ta call without 
6f90: 61 6e 20 65 78 70 6c 69 63 69 74 20 6f 70 65 72  an explicit oper
6fa0: 61 74 6f 72 2c 20 65 2e 67 2e 2c 0a 77 69 74 68  ator, e.g.,.with
6fb0: 69 6e 20 74 68 65 20 3c 74 74 3e 45 78 70 72 3c  in the <tt>Expr<
6fc0: 2f 74 74 3e 20 3c 74 74 3e 69 66 3c 2f 74 74 3e  /tt> <tt>if</tt>
6fd0: 20 61 6e 64 20 61 70 70 6c 69 63 61 74 69 6f 6e   and application
6fe0: 20 63 61 73 65 73 2c 20 74 68 65 20 76 61 6c 75   cases, the valu
6ff0: 65 20 6f 66 0a 3c 74 74 3e 45 78 70 72 3c 2f 74  e of.<tt>Expr</t
7000: 74 3e 27 73 20 3c 74 74 3e 65 6e 76 3c 2f 74 74  t>'s <tt>env</tt
7010: 3e 20 61 72 67 75 6d 65 6e 74 20 64 6f 65 73 20  > argument does 
7020: 6e 6f 74 20 63 68 61 6e 67 65 2c 20 77 68 69 63  not change, whic
7030: 68 20 69 73 20 67 6f 6f 64 2c 0a 73 69 6e 63 65  h is good,.since
7040: 20 6e 6f 74 68 69 6e 67 20 6e 65 65 64 73 20 74   nothing needs t
7050: 6f 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  o be added to th
7060: 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 61 74  e environment at
7070: 20 74 68 6f 73 65 20 63 61 6c 6c 20 73 69 74 65   those call site
7080: 73 2e 0a 54 68 65 20 76 61 6c 75 65 20 6f 66 20  s..The value of 
7090: 3c 74 74 3e 45 78 70 72 3c 2f 74 74 3e 27 73 20  <tt>Expr</tt>'s 
70a0: 3c 74 74 3e 78 3c 2f 74 74 3e 20 61 72 67 75 6d  <tt>x</tt> argum
70b0: 65 6e 74 20 64 6f 65 73 20 6e 6f 74 0a 63 68 61  ent does not.cha
70c0: 6e 67 65 20 65 69 74 68 65 72 2c 20 73 6f 20 74  nge either, so t
70d0: 68 65 20 63 6c 61 75 73 65 20 74 68 61 74 20 72  he clause that r
70e0: 65 61 64 73 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a 3c  eads..</p><p>..<
70f0: 2f 70 3e 3c 70 3e 3c 74 74 3e 26 6e 62 73 70 3b  /p><p><tt>&nbsp;
7100: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
7110: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
7120: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
7130: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
7140: 70 3b 5b 2c 76 26 6e 62 73 70 3b 28 67 75 61 72  p;[,v&nbsp;(guar
7150: 64 26 6e 62 73 70 3b 28 73 79 6d 62 6f 6c 3f 26  d&nbsp;(symbol?&
7160: 6e 62 73 70 3b 76 29 29 26 6e 62 73 70 3b 76 5d  nbsp;v))&nbsp;v]
7170: 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c 70 3e 73 68 6f  </tt>.</p><p>sho
7180: 75 6c 64 20 6e 6f 74 20 62 65 20 72 65 70 6c 61  uld not be repla
7190: 63 65 64 20 62 79 20 6f 6e 65 20 74 68 61 74 20  ced by one that 
71a0: 72 65 61 64 73 0a 0a 3c 2f 70 3e 3c 70 3e 0a 0a  reads..</p><p>..
71b0: 3c 2f 70 3e 3c 70 3e 3c 74 74 3e 26 6e 62 73 70  </p><p><tt>&nbsp
71c0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
71d0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
71e0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
71f0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
7200: 73 70 3b 5b 2c 76 26 6e 62 73 70 3b 28 67 75 61  sp;[,v&nbsp;(gua
7210: 72 64 26 6e 62 73 70 3b 28 73 79 6d 62 6f 6c 3f  rd&nbsp;(symbol?
7220: 26 6e 62 73 70 3b 76 29 29 26 6e 62 73 70 3b 78  &nbsp;v))&nbsp;x
7230: 5d 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c 70 3e 6f 72  ]</tt>.</p><p>or
7240: 20 6e 65 73 74 65 64 20 65 78 70 72 65 73 73 69   nested expressi
7250: 6f 6e 73 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  ons will not be 
7260: 68 61 6e 64 6c 65 64 20 70 72 6f 70 65 72 6c 79  handled properly
7270: 2e 0a 49 6e 20 67 65 6e 65 72 61 6c 2c 20 74 68  ..In general, th
7280: 65 20 76 61 6c 75 65 73 20 6f 66 20 61 6e 79 20  e values of any 
7290: 76 61 72 69 61 62 6c 65 73 20 62 6f 75 6e 64 20  variables bound 
72a0: 6f 75 74 73 69 64 65 20 61 20 3c 74 74 3e 6d 61  outside a <tt>ma
72b0: 74 63 68 3c 2f 74 74 3e 0a 65 78 70 72 65 73 73  tch</tt>.express
72c0: 69 6f 6e 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67  ion do not chang
72d0: 65 20 77 68 65 6e 20 61 20 3c 74 74 3e 63 61 74  e when a <tt>cat
72e0: 61 3c 2f 74 74 3e 20 63 61 6c 6c 20 69 73 20 75  a</tt> call is u
72f0: 73 65 64 20 74 6f 20 72 65 63 75 72 0a 64 69 72  sed to recur.dir
7300: 65 63 74 6c 79 20 74 6f 20 74 68 65 20 3c 74 74  ectly to the <tt
7310: 3e 6d 61 74 63 68 3c 2f 74 74 3e 20 69 74 73 65  >match</tt> itse
7320: 6c 66 2e 0a 0a 3c 2f 70 3e 3c 70 3e 0a 3c 61 20  lf...</p><p>.<a 
7330: 6e 61 6d 65 3d 22 6d 72 76 73 22 3e 3c 2f 61 3e  name="mrvs"></a>
7340: 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 2c 20 61  In some cases, a
7350: 20 70 72 6f 63 65 64 75 72 65 20 74 68 61 74 20   procedure that 
7360: 75 73 65 73 20 3c 74 74 3e 6d 61 74 63 68 3c 2f  uses <tt>match</
7370: 74 74 3e 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  tt> will need to
7380: 20 72 65 74 75 72 6e 0a 6d 75 6c 74 69 70 6c 65   return.multiple
7390: 20 76 61 6c 75 65 73 2e 0a 50 72 6f 67 72 61 6d   values..Program
73a0: 73 20 72 65 74 75 72 6e 20 6d 75 6c 74 69 70 6c  s return multipl
73b0: 65 20 76 61 6c 75 65 73 20 75 73 69 6e 67 20 74  e values using t
73c0: 68 65 20 3c 74 74 3e 76 61 6c 75 65 73 3c 2f 74  he <tt>values</t
73d0: 74 3e 0a 70 72 6f 63 65 64 75 72 65 20 61 6e 64  t>.procedure and
73e0: 20 72 65 63 65 69 76 65 20 74 68 65 6d 20 75 73   receive them us
73f0: 69 6e 67 20 74 68 65 20 3c 74 74 3e 6c 65 74 2d  ing the <tt>let-
7400: 76 61 6c 75 65 73 3c 2f 74 74 3e 0a 73 79 6e 74  values</tt>.synt
7410: 61 63 74 69 63 20 66 6f 72 6d 2e 0a 54 68 65 73  actic form..Thes
7420: 65 20 66 65 61 74 75 72 65 73 20 61 72 65 20 64  e features are d
7430: 65 73 63 72 69 62 65 64 20 69 6e 0a 3c 61 20 63  escribed in.<a c
7440: 6c 61 73 73 3d 22 72 65 66 22 20 68 72 65 66 3d  lass="ref" href=
7450: 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 63 68 65  "http://www.sche
7460: 6d 65 2e 63 6f 6d 2f 74 73 70 6c 34 2f 63 6f 6e  me.com/tspl4/con
7470: 74 72 6f 6c 2e 68 74 6d 6c 23 53 45 43 54 4d 52  trol.html#SECTMR
7480: 56 53 22 3e 3c 69 3e 54 68 65 0a 53 63 68 65 6d  VS"><i>The.Schem
7490: 65 20 50 72 6f 67 72 61 6d 6d 69 6e 67 20 4c 61  e Programming La
74a0: 6e 67 75 61 67 65 3c 2f 69 3e 3c 2f 61 3e 2e 0a  nguage</i></a>..
74b0: 48 65 72 65 20 69 73 20 61 20 73 69 6d 70 6c 65  Here is a simple
74c0: 20 65 78 61 6d 70 6c 65 20 61 64 61 70 74 65 64   example adapted
74d0: 20 66 72 6f 6d 20 3c 69 3e 54 68 65 20 53 63 68   from <i>The Sch
74e0: 65 6d 65 20 50 72 6f 67 72 61 6d 6d 69 6e 67 20  eme Programming 
74f0: 4c 61 6e 67 75 61 67 65 3c 2f 69 3e 2e 0a 0a 3c  Language</i>...<
7500: 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c 70 3e 3c  /p><p>..</p><p><
7510: 74 74 3e 28 64 65 66 69 6e 65 26 6e 62 73 70 3b  tt>(define&nbsp;
7520: 73 70 6c 69 74 3c 62 72 3e 0a 0a 26 6e 62 73 70  split<br>..&nbsp
7530: 3b 26 6e 62 73 70 3b 28 6c 61 6d 62 64 61 26 6e  ;&nbsp;(lambda&n
7540: 62 73 70 3b 28 6c 73 29 3c 62 72 3e 0a 0a 26 6e  bsp;(ls)<br>..&n
7550: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
7560: 26 6e 62 73 70 3b 28 69 66 26 6e 62 73 70 3b 28  &nbsp;(if&nbsp;(
7570: 6f 72 26 6e 62 73 70 3b 28 6e 75 6c 6c 3f 26 6e  or&nbsp;(null?&n
7580: 62 73 70 3b 6c 73 29 26 6e 62 73 70 3b 28 6e 75  bsp;ls)&nbsp;(nu
7590: 6c 6c 3f 26 6e 62 73 70 3b 28 63 64 72 26 6e 62  ll?&nbsp;(cdr&nb
75a0: 73 70 3b 6c 73 29 29 29 3c 62 72 3e 0a 0a 26 6e  sp;ls)))<br>..&n
75b0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
75c0: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
75d0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28 76  p;&nbsp;&nbsp;(v
75e0: 61 6c 75 65 73 26 6e 62 73 70 3b 6c 73 26 6e 62  alues&nbsp;ls&nb
75f0: 73 70 3b 27 28 29 29 3c 62 72 3e 0a 0a 26 6e 62  sp;'())<br>..&nb
7600: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
7610: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
7620: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28 6c 65  ;&nbsp;&nbsp;(le
7630: 74 2d 76 61 6c 75 65 73 26 6e 62 73 70 3b 28 5b  t-values&nbsp;([
7640: 28 6f 64 64 73 26 6e 62 73 70 3b 65 76 65 6e 73  (odds&nbsp;evens
7650: 29 26 6e 62 73 70 3b 28 73 70 6c 69 74 26 6e 62  )&nbsp;(split&nb
7660: 73 70 3b 28 63 64 64 72 26 6e 62 73 70 3b 6c 73  sp;(cddr&nbsp;ls
7670: 29 29 5d 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b  ))])<br>..&nbsp;
7680: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
7690: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
76a0: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
76b0: 26 6e 62 73 70 3b 28 76 61 6c 75 65 73 26 6e 62  &nbsp;(values&nb
76c0: 73 70 3b 28 63 6f 6e 73 26 6e 62 73 70 3b 28 63  sp;(cons&nbsp;(c
76d0: 61 72 26 6e 62 73 70 3b 6c 73 29 26 6e 62 73 70  ar&nbsp;ls)&nbsp
76e0: 3b 6f 64 64 73 29 3c 62 72 3e 0a 0a 26 6e 62 73  ;odds)<br>..&nbs
76f0: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
7700: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
7710: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
7720: 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e  p;&nbsp;&nbsp;&n
7730: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
7740: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73  &nbsp;&nbsp;&nbs
7750: 70 3b 26 6e 62 73 70 3b 28 63 6f 6e 73 26 6e 62  p;&nbsp;(cons&nb
7760: 73 70 3b 28 63 61 64 72 26 6e 62 73 70 3b 6c 73  sp;(cadr&nbsp;ls
7770: 29 26 6e 62 73 70 3b 65 76 65 6e 73 29 29 29 29  )&nbsp;evens))))
7780: 29 29 0a 3c 62 72 3e 0a 3c 62 72 3e 0a 28 73 70  )).<br>.<br>.(sp
7790: 6c 69 74 26 6e 62 73 70 3b 27 28 61 26 6e 62 73  lit&nbsp;'(a&nbs
77a0: 70 3b 62 26 6e 62 73 70 3b 63 26 6e 62 73 70 3b  p;b&nbsp;c&nbsp;
77b0: 64 26 6e 62 73 70 3b 65 26 6e 62 73 70 3b 66 29  d&nbsp;e&nbsp;f)
77c0: 29 26 6e 62 73 70 3b 3c 69 6d 67 20 73 72 63 3d  )&nbsp;<img src=
77d0: 22 6d 61 74 63 68 5f 66 69 6c 65 73 2f 30 2e 67  "match_files/0.g
77e0: 69 66 22 20 61 6c 74 3d 22 26 6c 74 3b 67 72 61  if" alt="&lt;gra
77f0: 70 68 69 63 26 67 74 3b 22 3e 26 6e 62 73 70 3b  phic&gt;">&nbsp;
7800: 28 61 26 6e 62 73 70 3b 63 26 6e 62 73 70 3b 65  (a&nbsp;c&nbsp;e
7810: 29 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62  )<br>..&nbsp;&nb
7820: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
7830: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
7840: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
7850: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
7860: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
7870: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
7880: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
7890: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
78a0: 3b 3c 69 6d 67 20 73 72 63 3d 22 6d 61 74 63 68  ;<img src="match
78b0: 5f 66 69 6c 65 73 2f 67 68 6f 73 74 52 69 67 68  _files/ghostRigh
78c0: 74 61 72 72 6f 77 2e 67 69 66 22 3e 26 6e 62 73  tarrow.gif">&nbs
78d0: 70 3b 28 62 26 6e 62 73 70 3b 64 26 6e 62 73 70  p;(b&nbsp;d&nbsp
78e0: 3b 66 29 3c 2f 74 74 3e 0a 3c 2f 70 3e 3c 70 3e  ;f)</tt>.</p><p>
78f0: 54 68 65 20 3c 74 74 3e 76 61 6c 75 65 73 3c 2f  The <tt>values</
7900: 74 74 3e 20 70 72 6f 63 65 64 75 72 65 20 69 73  tt> procedure is
7910: 20 75 73 65 64 20 74 6f 20 72 65 74 75 72 6e 20   used to return 
7920: 6d 75 6c 74 69 70 6c 65 20 76 61 6c 75 65 73 3b  multiple values;
7930: 20 69 74 0a 74 61 6b 65 73 20 61 6e 20 61 72 62   it.takes an arb
7940: 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20 6f 66  itrary number of
7950: 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 72   arguments and r
7960: 65 74 75 72 6e 73 20 74 68 65 6d 20 61 73 20 74  eturns them as t
7970: 68 65 20 76 61 6c 75 65 73 2e 0a 49 66 20 70 61  he values..If pa
7980: 73 73 65 64 20 6f 6e 65 20 76 61 6c 75 65 2c 20  ssed one value, 
7990: 3c 74 74 3e 76 61 6c 75 65 73 3c 2f 74 74 3e 20  <tt>values</tt> 
79a0: 62 65 68 61 76 65 73 20 6c 69 6b 65 20 74 68 65  behaves like the
79b0: 20 69 64 65 6e 74 69 74 79 2e 0a 3c 74 74 3e 6c   identity..<tt>l
79c0: 65 74 2d 76 61 6c 75 65 73 3c 2f 74 74 3e 20 69  et-values</tt> i
79d0: 73 20 6c 69 6b 65 20 3c 74 74 3e 6c 65 74 3c 2f  s like <tt>let</
79e0: 74 74 3e 2c 20 65 78 63 65 70 74 20 74 68 61 74  tt>, except that
79f0: 20 65 61 63 68 20 62 69 6e 64 69 6e 67 20 62 69   each binding bi
7a00: 6e 64 73 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  nds.zero or more
7a10: 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 7a 65   variables to ze
7a20: 72 6f 20 6f 72 20 6d 6f 72 65 20 72 65 74 75 72  ro or more retur
7a30: 6e 20 76 61 6c 75 65 73 2e 0a 0a 3c 2f 70 3e 3c  n values...</p><
7a40: 70 3e 0a 54 68 65 20 70 61 74 74 65 72 6e 20 6d  p>.The pattern m
7a50: 61 74 63 68 65 72 20 63 61 74 61 20 73 79 6e 74  atcher cata synt
7a60: 61 78 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ax can also be u
7a70: 73 65 64 20 74 6f 20 72 65 63 65 69 76 65 20 6d  sed to receive m
7a80: 75 6c 74 69 70 6c 65 0a 76 61 6c 75 65 73 2e 0a  ultiple.values..
7a90: 57 68 65 6e 20 6d 61 6b 69 6e 67 20 69 6d 70 6c  When making impl
7aa0: 69 63 69 74 20 72 65 63 75 72 73 69 76 65 20 63  icit recursive c
7ab0: 61 6c 6c 73 20 75 73 69 6e 67 20 74 68 65 20 63  alls using the c
7ac0: 61 74 61 20 28 3c 74 74 3e 2c 5b 5d 3c 2f 74 74  ata (<tt>,[]</tt
7ad0: 3e 29 20 73 79 6e 74 61 78 2c 0a 6f 6e 65 20 63  >) syntax,.one c
7ae0: 61 6e 20 69 6e 63 6c 75 64 65 20 7a 65 72 6f 20  an include zero 
7af0: 6f 72 20 6d 6f 72 65 20 76 61 72 69 61 62 6c 65  or more variable
7b00: 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 62 72  s between the br
7b10: 61 63 6b 65 74 73 0a 28 61 66 74 65 72 20 74 68  ackets.(after th
7b20: 65 20 3c 74 74 3e 2d 26 67 74 3b 3c 2f 74 74 3e  e <tt>-&gt;</tt>
7b30: 2c 20 69 66 20 6f 6e 65 20 69 73 20 70 72 65 73  , if one is pres
7b40: 65 6e 74 29 2c 0a 65 61 63 68 20 72 65 70 72 65  ent),.each repre
7b50: 73 65 6e 74 69 6e 67 20 6f 6e 65 20 6f 66 20 74  senting one of t
7b60: 68 65 20 65 78 70 65 63 74 65 64 20 72 65 74 75  he expected retu
7b70: 72 6e 20 76 61 6c 75 65 73 2e 0a 3c 74 74 3e 73  rn values..<tt>s
7b80: 70 6c 69 74 3c 2f 74 74 3e 20 6d 61 79 20 74 68  plit</tt> may th
7b90: 75 73 20 62 65 20 64 65 66 69 6e 65 64 20 75 73  us be defined us
7ba0: 69 6e 67 20 3c 74 74 3e 6d 61 74 63 68 3c 2f 74  ing <tt>match</t
7bb0: 74 3e 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 0a 0a  t> as follows...
7bc0: 3c 2f 70 3e 3c 70 3e 0a 0a 3c 2f 70 3e 3c 70 3e  </p><p>..</p><p>
7bd0: 3c 74 74 3e 28 64 65 66 69 6e 65 26 6e 62 73 70  <tt>(define&nbsp
7be0: 3b 73 70 6c 69 74 3c 62 72 3e 0a 0a 26 6e 62 73  ;split<br>..&nbs
7bf0: 70 3b 26 6e 62 73 70 3b 28 6c 61 6d 62 64 61 26  p;&nbsp;(lambda&
7c00: 6e 62 73 70 3b 28 6c 73 29 3c 62 72 3e 0a 0a 26  nbsp;(ls)<br>..&
7c10: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
7c20: 3b 26 6e 62 73 70 3b 28 6d 61 74 63 68 26 6e 62  ;&nbsp;(match&nb
7c30: 73 70 3b 6c 73 3c 62 72 3e 0a 0a 26 6e 62 73 70  sp;ls<br>..&nbsp
7c40: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
7c50: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b  sp;&nbsp;&nbsp;[
7c60: 28 29 26 6e 62 73 70 3b 28 76 61 6c 75 65 73 26  ()&nbsp;(values&
7c70: 6e 62 73 70 3b 27 28 29 26 6e 62 73 70 3b 27 28  nbsp;'()&nbsp;'(
7c80: 29 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70 3b 26  ))]<br>..&nbsp;&
7c90: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
7ca0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b 28 2c  ;&nbsp;&nbsp;[(,
7cb0: 78 29 26 6e 62 73 70 3b 28 76 61 6c 75 65 73 26  x)&nbsp;(values&
7cc0: 6e 62 73 70 3b 60 28 2c 78 29 26 6e 62 73 70 3b  nbsp;`(,x)&nbsp;
7cd0: 27 28 29 29 5d 3c 62 72 3e 0a 0a 26 6e 62 73 70  '())]<br>..&nbsp
7ce0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
7cf0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 5b  sp;&nbsp;&nbsp;[
7d00: 28 2c 78 26 6e 62 73 70 3b 2c 79 26 6e 62 73 70  (,x&nbsp;,y&nbsp
7d10: 3b 2e 26 6e 62 73 70 3b 2c 5b 6f 64 64 73 26 6e  ;.&nbsp;,[odds&n
7d20: 62 73 70 3b 65 76 65 6e 73 5d 29 3c 62 72 3e 0a  bsp;evens])<br>.
7d30: 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  .&nbsp;&nbsp;&nb
7d40: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
7d50: 6e 62 73 70 3b 26 6e 62 73 70 3b 28 76 61 6c 75  nbsp;&nbsp;(valu
7d60: 65 73 26 6e 62 73 70 3b 28 63 6f 6e 73 26 6e 62  es&nbsp;(cons&nb
7d70: 73 70 3b 78 26 6e 62 73 70 3b 6f 64 64 73 29 3c  sp;x&nbsp;odds)<
7d80: 62 72 3e 0a 0a 26 6e 62 73 70 3b 26 6e 62 73 70  br>..&nbsp;&nbsp
7d90: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
7da0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
7db0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
7dc0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
7dd0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 28  sp;&nbsp;&nbsp;(
7de0: 63 6f 6e 73 26 6e 62 73 70 3b 79 26 6e 62 73 70  cons&nbsp;y&nbsp
7df0: 3b 65 76 65 6e 73 29 29 5d 29 29 29 0a 3c 62 72  ;evens))]))).<br
7e00: 3e 0a 3c 62 72 3e 0a 28 73 70 6c 69 74 26 6e 62  >.<br>.(split&nb
7e10: 73 70 3b 27 28 61 26 6e 62 73 70 3b 62 26 6e 62  sp;'(a&nbsp;b&nb
7e20: 73 70 3b 63 26 6e 62 73 70 3b 64 26 6e 62 73 70  sp;c&nbsp;d&nbsp
7e30: 3b 65 26 6e 62 73 70 3b 66 29 29 26 6e 62 73 70  ;e&nbsp;f))&nbsp
7e40: 3b 3c 69 6d 67 20 73 72 63 3d 22 6d 61 74 63 68  ;<img src="match
7e50: 5f 66 69 6c 65 73 2f 30 2e 67 69 66 22 20 61 6c  _files/0.gif" al
7e60: 74 3d 22 26 6c 74 3b 67 72 61 70 68 69 63 26 67  t="&lt;graphic&g
7e70: 74 3b 22 3e 26 6e 62 73 70 3b 28 61 26 6e 62 73  t;">&nbsp;(a&nbs
7e80: 70 3b 63 26 6e 62 73 70 3b 65 29 3c 62 72 3e 0a  p;c&nbsp;e)<br>.
7e90: 0a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  .&nbsp;&nbsp;&nb
7ea0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
7eb0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
7ec0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
7ed0: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
7ee0: 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70  nbsp;&nbsp;&nbsp
7ef0: 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62  ;&nbsp;&nbsp;&nb
7f00: 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b 26  sp;&nbsp;&nbsp;&
7f10: 6e 62 73 70 3b 26 6e 62 73 70 3b 3c 69 6d 67 20  nbsp;&nbsp;<img 
7f20: 73 72 63 3d 22 6d 61 74 63 68 5f 66 69 6c 65 73  src="match_files
7f30: 2f 67 68 6f 73 74 52 69 67 68 74 61 72 72 6f 77  /ghostRightarrow
7f40: 2e 67 69 66 22 3e 26 6e 62 73 70 3b 28 62 26 6e  .gif">&nbsp;(b&n
7f50: 62 73 70 3b 64 26 6e 62 73 70 3b 66 29 3c 2f 74  bsp;d&nbsp;f)</t
7f60: 74 3e 0a 3c 2f 70 3e 3c 70 3e 0a 20 0a 20 0a 3c  t>.</p><p>. . .<
7f70: 2f 70 3e 3c 70 3e 3c 2f 70 3e 3c 68 72 3e c2 a9  /p><p></p><hr>..
7f80: 26 6e 62 73 70 3b 32 30 31 33 26 6e 62 73 70 3b  &nbsp;2013&nbsp;
7f90: 52 2e 20 4b 65 6e 74 20 44 79 62 76 69 67 0a 3c  R. Kent Dybvig.<
7fa0: 70 3e 0a 0a 3c 2f 70 3e 3c 64 69 76 20 69 64 3d  p>..</p><div id=
7fb0: 22 6c 69 6e 6b 36 34 5f 76 64 70 5f 74 61 62 69  "link64_vdp_tabi
7fc0: 64 22 20 73 74 79 6c 65 3d 22 64 69 73 70 6c 61  d" style="displa
7fd0: 79 3a 6e 6f 6e 65 3b 22 3e 31 38 36 35 3c 2f 64  y:none;">1865</d
7fe0: 69 76 3e 3c 2f 62 6f 64 79 3e 3c 64 69 76 20 69  iv></body><div i
7ff0: 64 3d 22 61 62 69 6e 65 46 69 6c 6c 45 6c 65 6d  d="abineFillElem
8000: 65 6e 74 22 3e 3c 2f 64 69 76 3e 3c 2f 68 74 6d  ent"></div></htm
8010: 6c 3e                                            l>