From 4c02e3736dc868134db4067f143fba56bb953479 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Tue, 24 Feb 2009 16:17:35 +0000 Subject: [PATCH] svn: r13814 --- .../bmps/metafunction-Name-vertical.png | Bin 4793 -> 4795 bytes .../redex/private/bmps/metafunction-Name.png | Bin 4441 -> 4467 bytes .../redex/private/bmps/metafunction-TL.png | Bin 4613 -> 4628 bytes .../private/bmps/metafunctions-multiple.png | Bin 8029 -> 8044 bytes collects/redex/private/reduction-semantics.ss | 125 +++++++++--------- 5 files changed, 63 insertions(+), 62 deletions(-) diff --git a/collects/redex/private/bmps/metafunction-Name-vertical.png b/collects/redex/private/bmps/metafunction-Name-vertical.png index cffd3e9f29060a58b2f9bce1e90afd087df4c997..cde38b7b0f9323367c1547623680abc12e2c96c6 100644 GIT binary patch literal 4795 zcmWky2RM{}9DgNTQ7(I>v$D7Bd51I4ri>B_83~yg>5QYYLgWa^3fU{8vqhXZRAhHH zk^Y(gU+?qWz3+3+`~24Tv%ZHj#h@>o=Qs~R&;@-xZF6uB0v{vT8SpKp zT9!fC8}{y&7HG~K>{*6$ye}hT-uGQ3XlYUzDXsUF2$j=HFeMfXxrsK8u)x=z7Z+cr z>S}hJI^XDAIB%^~JDy*6oe74BzjF>w(v0NaJ$_l)Abr+1uR8cqI63rZ+aLVgP^+w8 zZtx}?fyLwT=g*%vFff?C64&kYSX1gY;p{fW7EBw061tsaGVLW;MUVgf%uP#6YiVwd zDIq1QAGmeLGiPRI?(gsSxp{eAe%mZ{w9|X#=V$zvFJEZs>Cw869v%7E#6ONZVNB?L zrEs6S%9a8O4-ao^YvX4)$6i`m+UZbGSNBj;GqSZ+EukApjrD01?cP4sj`%%pGf{b~ z{o$JRt;Aoye!YH;2n!1f4L#iW)&Q0RXW! zKaY&~3}szgT3RYrm6MYb7Z+Dm{SID+I+lDhByV}&yT`%C7PRrT?ir_o(g)NZ8g)D=nm1|Lob&_a?vHU%w=7e&}`hq zAjdKE@#Ea#R{Nj5y*EU+n3$NIogFhXGbqw^I7bTx&dpuUR$E)!+q)toBcrJ)`2KxK zEF9T)x5m%cm;VBcC$aa-*x1q0?l2G5W1`}ktSlq!?6wz|qK_sT{d0Y)=FirTKfiw2 zR=b=N`Ln$}GCqDyT3TOE502ALPfy2SFzoE?CnqN&A|lJn%h$1YKBePTgUv_T*pFV3 zXJ&318h(;&KVmT8x8-M`qNcXCvEkeLy*6=paDap@%+Cukoloq20zWx9+=3$i`!5KV zcU|nR6q~THFdRuq`J~*gA)i)7S(%BM+0W09m^Y}6g2~Ft;>Zh9BVZ2w(g-y9qq`|DFrj>gBvax@~;12?}@a90W#roVanHU^8u#>6NqDnbyb zmy?sz$P_w}n~H|U#@f24tLsHZ#*gNQw7;EUv@Bwp4q9er$yHTV&CSXpfqs4}q5EPv zvEO=nsHf#pOf4b<9%j}QM8Fu?MjJVBvQPZ}B;T3T9CQW$cF z(M4`@S&Mb%ejk^Y??RELLZ0sKS^|J1EG#U(oY;BCkC{eqQ&SnM&z(gY85#Ne?|lf~ zeOF%YI+RrxejKunTu&j9NcyQ)Z!ghNqr3}YOy_k>Oz4Yt9ko)F)q}QQ<8b}`se;5g zuz+0kuz@+B+PXRl2<-c#Qsn#VVpLRAXml^&mt{(J_PfeTjcqGHyy1a?__(+@9PY-4 zpsKVq=2t^^Yo^HWOodbf)+bMn4;4HoA*j)RC1ntytgMW~;gESr+PoA{j(S*p(MKqf zKp;d$LM2FN=Y<4T$@!;J&>KeMqAvvn1yw51Mpprall9I*jbVoY7|iq7Sel$h7n$Id z(L&eH*$)B&NaN!=3;go>Nx1s@`q|mpq@<*z2QBm0*e%IOC8;i_yyLYd8YTcp;WBgKTt_#Nq_zLFlyHZHcDRtq(1(R$= z3Z8dmWq$tt{0ulCUPf1U=erZGGt1C)K3pSJU4OT~9{{_pqeGQu@C=7b<}hbqWE8|? z_c>JoNs*D2t*fp5{{1@w%gxRGa`p2Qd~u#q3!6EBQa@P!Tm3Rmtn?ViFQ8IBhr*9D|LG;1U83YqXcZ zCJp~Y!RWbF8-14y*4Nzxvf_SLxK>>Ud(x4|V|q{JfOer!ol`Zg7A2M?7GP?wi)b+x zKFWu%Ak9Map`jt1HZP>9udi=mVKISO}==rns~d1RjA6JW{{H zuITYd5Ychz(S>ePbMw)enTrr2wZFBs6@qAK6WTO-l9IEtxi~rPtgYpPe=T-&bl_D2 z&pP3qyA+otVTo zVT^z~?w>M>Go3fdQN?i=pGLiT!@n1=7$0=>-ve*&&F${{?(SyR*5Nzz-H`g!)D&2x zfPlcC&1sZ?HWaDH|F!YK0w~vysq6=q5B~mIDnKVb_vYl~E5ln4#=gu8={X0$ZKqDZ2u4FUy-R0H8pkb^UJ_;B_t#+U%sp<#=^3r{QQd}d8pUT%~{&KJW-bh_(Zy$r12Q^ zR*)FWr~ZETPwC=t0szd&i0KPAP{^nGweR1@J$n{?Z1FZ_Z#h-a1cE?;IDHL`jje2K zdWAgcd`rf_(o9TDToy`L1(cPP*qc^XR+Lm!_*4`X*+Qf4Ty1XuucxP{$Rt;H39xB@ zZ;v0~SelLQsYr^UWphglD-+XTwo(nKw4&mFeaU=KBn>^c<8*#b4!5ou2CrP#))wwK zz*L|>OG_)vG+?4}jAaP{(h{tC)4}0#LU+pg$znZxx9f&vR9)RQnX&Ql>FMcYHTTgs zKZkP_6cn84hJknjtA8e_PVMEjQC%(b&jPY9#XQCtn3xO$NZZ-jq0wkpSJ#M$(}973 z(o&H@bi6v%FCmM;+};IY5fP^v6a%jI&L@^k|LqQOF3;95`of#|J{K95TfeAi1epgN zrGiws`^Uy=tEw*XG1FWXp@4wmXlZEy&41wU58x*!C8g+3hQAu(b{vgQmBGt<*@lLO z1_deNF*N_w^k!=a^HfUGH^N7fD61TYxV$`zO4n$-tU5>^L?RD}Iu=4N4h}-L<;_;+ z=d14yag@BetfL?$r3Xmi?|&9jR8h%Q3HqJ zoDdfWtA)qL7GvSwUu$u?1$nnc)YL9R+l&2-{st-PI?fkuvFnL4Y55BGr<=PSr7SHi zNAOY0$dryR1mNYw6@M^g_V4_U@2jgBE`Obzd`-cHWaH+Z2^=!@m0FiPnQ09*o1o#@ z+u7+K9;Sg4>g(le7nR?U!I)8+2%t66@`jf=LPA2aUcI8R+DancIwFy*A8T$e4{=6B zM8xe7b#!!6zMs;3V3d=W2Z_QzFc1Yhy|Z=i-o0W=5!=y|$iOH701$8TZuA@)r9Ky) zwY~i}^7J`9j+=*$m#C(uHu-&Jw}(A)8fyz-^!+qZA@9u_nA z>GIc-LO8<(+1QQc!uyz>+-eCB7ZM^5q=|xLeCN&`H~~23jqBG3Uny*T#;YW-h=&{> z)E$jXt~ZyK4uG`VpCa%`T|-RF$k4 z#>U>=Z2j8X>)IJ}!Cs=FynLhMF{R(~puVy39VxcIfB%|aG`BcNCTcIl8c7EMBX}Wf zLH0j*Yy1ju1E8+oQHp_qA-|yDh8Rn--qBiR`=V~RVF?qM#%B%*pBLKr>zy9X%%A z_qkM?3W-TdP7sN>xVWTy5?3kGRz_I)UgLTS!eWjSK3Z8?CJ{*_YN$iqEC0)i;={qw z>S^E|4vjt^2M5LE<>diBczFpE6AkSN8HY`I!uQG~z(ola4k9xXIfxIgpM^J*%N)c)|{ zLz@cw8^HVR>=MqN0YSpl!lJWcbq#?7Cx7MYixP9hedd9a{Z zHFt;3K#rnQY(@4rZj`)v1G<255-B|+16^odct8dr_0|DYcn%dFuAXV6%O7;}CigSl z!@VyiW>>_OYOAL_Sy@>x#_q0;i`It69gsl?1%d7N-d^8&!JWPUN=nM)*|g3%Z8W-o z0K{}{Wo784bU}6Xuih&W{BRfu%nl9?84?cW*4A%{ZlJ>il{7XsF0-kmhPX7sxvYej z5LOfaDu;T@W-mhIx)?ijH&u@xG;mL7=+8i)H9%m=yCa~h>VGQ6M@(tgk7!SPp&|dB zen?B=q~L0ZX_6>)Wmy@RSxfE|I4!UavrYt7NlD4vcyLbndw; zVomuOo>9(6tdsGva8*G;*Pf^Bk~crF(crjMLVkX{X=P{k$wek1J{}_P5@ZN$f#AoJ z$7H_v{QP_~%wEu#3jKL!0iqArDt^vUKD&cK+*st9Y7c&fozA@zM>LURyC32z_2z=0 zt_E=dvqcwEJJ%&7XuC5tB38!`_j*c1jo`M;6jYj*; z&FK~j=-+<;S1M;gKm_4Y+&V88+q-bX*0v4xS3TxrzM-xTc2-q4|9Ki|Cb^YS1GocnVI7agxn^h+Ul&2Vsvyg2uh** z>+G?eO5sP1Mh#||TKjA6ckeC>=01vA-`m?$@>_l#R`KIQaOd5cD$GL5R$C45YAGqr zUF)-%p~nX9rhrim-qZJhUpYJTHJM0-`zU7fp`W|CxxLKFs<3Y|Uw+;VJ>94MH2I^^ z$+XdDju3N!(TwkZ7)4}95_+o5PEtNmRY2mYsvA6(}phoA|NY&vL2hHQ1ri( z?BukWEkcEcggoa`lIi%mOco3gyKnzE_o7?fI!C#%19GY~Kj_+C8@i*HTQaUSt^=f=- zO7?zz=-!C>b(8Y`{{HH>Z&lQ^wFkw%JX=guI=$^j%C4+LnVGRkEG;cXwHVNKioYw5#zQ&ZDDdis7ca)g$E&Nwz|9bp*k{om+!PzDi9mGLyG}@>zQv>>c;PV0$U1T5 zaCm8Hsr5TgJ|Q7BUEQj}LJDR7KO`#%s;#J~So@rlm6a8=vvf}=IU^(EJRde8p=gY_ zzrQ~pcGeahO`W47BPJFTA0Lm!QbO`U`?SjGFJGz^k9Bu7$c#a&EXIV28o&QBl2Xd13T?mMy*&B_$<#!WfU`&IpR>>1pSo+_tc@_Tu8TBtdPx z=9ZS0=g*(l)I13eZZ#8asIK<(@wu<7`)7C8(8NSqQnFjitif&SWAfFa1YB1~1c^wj zsjfcwHFyhel;30j1c5*p8(;io-4WWBn8<(;la_v|RrKpH7`FJcxT1eic@ z+1a#w;}a9}%}=inOwP?!zIl_LoQ%HtmsScRcI66MLjdIeny~OO*t#u?lax!g$b6r?eR7yg^z|c^ISXo&Ka^JJ-1v;rP zT8#tT@BeFnO7kePdog%_%6ao^#Y{(-l2!zKdS+%~Vj?IYpsA@zUzjBV5sn%m`Vd8UAvkPgWJF(Ie|MGewzf7CwCmCD z%^IxPORzMPh3ts;g$z+eFr#b6rlzdLyS8_eniT!F^J{8$K#50IPX7MMQw$kc@v5(@ zgCIZBw=UW6>M1uWDk^H~=*~_=3dq2#;$j)k%FT%?XD6qq=xB9y^;_1hlcS?a-HV>L zFZ-AZFmc`Sbvrvf;goiRAj@W-k|E`~`g&$2CRKjMSXFXJKIDi+7fl9%T~AL>C1Tao z)L3s>e=vU!y`Ymqcg4iTz0YNl$PmS8e6SaX7WRM408EoeB>w@yYm&O^Gp)6vk-(9_Q~df42(+XbQq=zf!*A1(_ZNJaIGL_$G`2M-7l6x0x8 zU&BVlf=){_MIzTpvn?trDm;q8{u|>W*+V5boW8w%!To}yB&OWfUu0+Ov^6LT(MvPa z(~)6LTyt}CAa5!v=k0S+X6No+fkso{ zG>r81?P|>a1y{Q6EoRw>;>seRTwT%dmuYEZ$h!4)WCougAD`XQhgdgh3o9#yD_2wu z4adHGxv0EOBApUs=50~z?CgfcI>vf>09$hn?pgKq|M|K~IdggG8yg#2StV>89UblO z`(_tu3ozYG`@6lUvX^DI?(sE(nv09;-o1MuUS(kx8dq1>N0%|me2IN%I1ME^Y_SVX zZCYs=JIhspVBV4c?Isc#JV@{<0x;d!*!WpG8X+zh!OiaDXPu%&T^lutZcVwsJHjqq@>Y!)?4ScKMo9B6A=-) zd9&T`C$|mzE~u(2E7UjK$JIP&iyj zP>>5qi1NXY#`)%V@1$g8RA7LWtSl|zrqPShJfYkB`)apnqW+q7ag-fEH<{qFc+uBZMTl`o>&1{j#cMg5e zJI+pL1_$E_P5_>4gw3Le$!7%x1*Zcx?ZL9CT3;q6lzg|+Rr#Oz`l38MsF`9_ZEVg~ z2Giiw`iBQQ4*vi{hw+@MeFTLA%-w|n#4%oE=j7Bb908|glzEk(?+IjVQt8pP2Oi2W z)|-|{H@D!^5iNnYO0n>nGFtyGciSyKfvpW#f^UZCNCs(ZeKS;Yb;AQSDp+y-kn&VH#auUy}mCV_!cmbR?+F+m@X1ujK@a|txbIWT07-NBTsh86){#OiZ7+xQI(nM>;qx z10DMQ{rlRQDPVhZ^Vq}w;bH{$qqsw0Tmb6bd^PxSK)6S*a>;vMptkV%shy#FRU!kM zdg~+tolN5-krAwz=V)&~3K|XGyH#b4@W4ae<#awzc zGjy_~fnT{HDvIs0g`mfeA6Htp#kslkyD!>qre2WC;bvw=TiM(7m@DQDfjEVL71J*n zZ*G>`mewb3ZM8ZPI5MKSQY)*f@-j0w78W4L)5}W^*ud!MK8UVIcntW!&!0c1r>6rg zo#XlD4OCY?;MZJR5YS5-;4e_K&A^U*aIx(iQ|3tMUEUF3I{!H^8cQ}%Jc6vRukWvD zX!trh%7lOcZ#1HOnY(~V`JKy{kX+95sFJ!mDX25~s_yU&mm`)0StMhv(tuIaThi7MJ$H%4KfHR&Bc(}MQ z(meB+Yu(x1MYHi(nVAU_PQp6x+yw&U>FEj77_)7&U)kK8saA*={K4RV)qj601NfWF zN3BCr#B}n?i!T`tejdQr8Q=4ggPjuybV|0>ot*0h1^kkdZ!s8*ojW0jwlyMGF{C*s zXSP~;<)oLlnLeXx(JvA=qPnb}XTR+_Q3+hKb(2@m=xA+S9gFfik9kFJ@7;ji)!8O* z=aGVYRW=M9b*x^FgiM*HH7~Da5%8gW3#hX0!)X8htHy-Ds4Kf zfnW^{G2oiMeE9-I05IfSwH-xbpR2pOg6BeKwyZZ`_w@Tt*4DXL^rw_iN2!s6kzzJ^ zaq%YuDI&Dz9L8Qh06GHN&QT&`XJ-ervzs(9eW$-CY`nBXwM$qyIGQ~dm0@@UZ~hoj zH&5{ye06QDFy`;!p{$&ow6wH|u`weIv$SLnTP(O2Km305_;43k7m-Wxz;nPWvQtxg zmUkR42R7PLN{ztt_M4Q%Z!>-8Q&bmbxpw{f6|&nH`1!~k%A*?r`5hf+TT^cVv%E0^ z*6?v)U~^H?BOM(bRaHtaFu@r9e>v2crKYC3ySobt3TgzFmX})^7$^%c0V6JSKRx`Q z6--F%(Q{Sf{m6nHWF9pf?dsx!PbJ$kE%YUaEG;d+`*A=J`+vZegGEfeZYrdc4ZsG5 zk>|O0i8)VTjuPeqOyChfB%-6E2c=k(!}p29oLBN=dkaINPU5@3f4Gt9X&R`rL0X)R zHe1fge2P?RTz1p)o$cet9L&tgK$N+;Nz2P)HcnvZ0@F%m<;^{9;J*z^jGE}p3K`YZ zm=o0hV%2G%qfU-CtE{c9p>U{gIhRweU%MvEqUGr52&52&x|yJsOf0l`_%M`6#UextJh-C- zJ8l6uU>~`YFNFfERMo(GfO_h}-EW0F7$AU}rY=2MfC?*e~6hB|>q z&`*`1mw1|h72;4jVnGj5W)7}+-M-8e`>M1waC_k{ga`h$POx z>X=vW<>4enukx~<=`$+`_g_Q<{`2+oyOQ}&PqnnP-q^w4Z*93{G*VLB)7u+NYG9onEGLdQX*c=L$DH9^3P2MhrKaeT5bNdZyAP6N-Rdt+Pp;tW_zq1lHZ<(E zuc5hcfo%Q1L~c9m9d?rK8RFHCTcVSapN;abbSeur-# zJ-c3fzRPxkK<@~3Q>n;N+wD;(kR0FHYOL{Mz4BLbk!Kl zHmBEbKE&C|Ic&lM=U+c9p zpg815Wm~s4;t-Z~mhZXv{uv#o^j?5#`CGrj7D8BcacZSi%l_%f-;g+TIULRkYZ7dhs(}HFrtHfB|4L4)~N%*ZGA(dT)>w8-T$Ex_^df|m?$GI&IqGiSy=(I zG!DMN!EK`v^OD1cJZ3a;h*}X+t-0V&m2{B~5w#Lvf_MOIF zu7t*teaR4tX=ED;V|t%^{y2Y}&vQP{dA`5zb|%o9=tLw64L<;b!MKD;1Ppdu`>K(? zO+fZacCd|b*Hn^DN{5uF=tHVpOH`^YFCQ6!26ZfFLfL z&HhNj{w}F#jkvb+S9}`@=4|xS$C* zGHzg*U0bULC(~#<<+qy#!dF&SGBYy+0|UKk`Z?i(e;zu3PWmS?F_%nU?^SAJ^J^+A zE6d3pPTkzxj4{eHAU_psY-;L#pQ+u9`#U#vTO)1&WG_ z)RPFr!r~(3i<1_#yV>tj)%u$oYy&NPIDS@gi$J*j{ECc~mDQ(e_ukPm`{?UJG5@Bd zq;NQ#g@uKUjg9Q=?9?-MdADU{Wg8nCVK6q5j)ot4SNp%A%&h;eGZ+l>`}d!#3?l3A zzyBs-q1KR{4Iag3(9F!t5(_0H^kr!Y4*Ss46B{3I94w_5B8ouR+`K7Df9sd~~S-L&LR{lzh)n^;~mG1lSLX>5G}0(`VA$-QE4PC9)3ji#KOw zO+_9SIC1XQ@W_Y=0)dc{5`ew&UzL2)>wNcaY}Cbjqoq)TFN0tA#f|j1*jRZ)k0o}W z;4#a`$LCV@ro23%+l~K!0m`P?D`*yrh10jR?5ETDQVT6fT+YsBL4mBlzrW4nr2%qh z9CCi0=o*16)H5#$ZL-2Q&Y((rP0Jje(ml~j*lM`7u<-{@;oov*VjiilNNMwbOGpw4Rw#eJ8(eB)w{g;XuxT^dKop7felih2<=A=}rEtdVw28@(6J;F&@}` zMr-`$tE_IfyIx)ww6y-<<;}|+9=1_ctqCVKK3TbCYiny{WaRD5%2dDS?c<|$l0Uiw z(hqi5neb>Cci6mK^U7Ye(&&Mz#uWtf?ulVC8*SGsS7&zs=!NhA{K+UdB? z#(?#_Yn0T~>xPC0M+e&99)wMQ{(SJ@L0?Ae3V6-S%j^FAuwQG={L%T3n0VfA=le2L z3(LyR>FPQ-IZ45A_V&SxJt8)?9s>|Odh$muuE<7@MD%f)h!|?SaaKb^L-KC^{1Lpn zy^|AGTU#5**5_rnTa-a~U-iz;4vj{`cusSrle8WDUa?|bAd80JNk@dN$p@EW-Ar@s2xVL@o)hrLpOm=8`n)5E|sD*_E42DFe*Ld~^ z1q2)uJl5yz0Oa&SOqKuSg@MV*-QBJ4PoF+zvAogiQc{Yq;B|F%#^@vivgrFRO&Q*` zin6lXc6QMpnM|fPWKfxh+Y5>#GI@J@d%PU)07VL#7#Zbm9n*bl2nT|-pjZv&gqoP}!e-a!yS&mj67wX< zb=ll!cuKFP@679=Wi@fWoUy^;T$KQH$geeWYiny#((%40gS-0f?x!bf8yYU(lN5Zn zwzdY%#3}ZCKfJ$#eJ~5lgbd&<&CNd;ZH#XpN{+yYc;Hp$=6sm3v9X4RhIw{5PM%=k z?CgB%n(+(nC}VA4Vq%9ip-OY$Kb3Mt1}w(#3dI=72aCW5m@&CqRN4bXR;L;SU~6CLC^bgAxVo}3-Vq_Lp{}kDX6YpXy~NJ};(KeL z&V8h+3MXUd4Lv=-!A$Lw%~T$7={u_3GOqE=-7T49vj|c*C&TUKoGO8nbd53|S$1{i z+=F7h=)(k@Y;ru5^!V7;;5QdvJPcSW!1CU`?;ugCjx1y2cd2^ObGn+E{%<4xIH)5f zGOSO^%FNXEozd0K>05ks=FAx$E+<3N_f=$M$Bp;f4C7E6lHtYT`ueoDcMwP<(fA7U z8BYEz27{5857=cF;pBCnutY^aam*J(i}B7OYK6a+A#3m8E#^pjdwXxX5}<2ZYN|dQ zM6Z{tYmG~1>{Nqqg<}iQ(^$uk+{PlkXf=l#4|>pQ%g?nN#cg{2I6#Mxkmm64@YK{1 zu#_Wavb?16eIND zFJxjvZv1)s_heyqX_x56MdZ9%QXe?P788PLew{G3SD1LCOHj_Q0 zqy&&jc>WwWV=N=2uBL{gSw_yhi2RBm79+Nm>M4U>RA9k>!rH@pOhMKVbJspwg+`E{ zKZqtw{QOzQitE?0%J-LRQwd?=`ogzfjJ*$D|VF##S&AQCO1RuGPc1_q!W;v+`J z#;oO2^!X}R(Jp|n0XCF?f9t)*D%!X`i;s9<5O+uJB#YLgQ@DG`@c7)9%Q;)LUwgsq zrNPfl{`spk8_ab&sqWs`vuDrBZ`H+Kktug-)6>yG?a92hQrJFIM}dXUAlD1 z%hYyyS)VXIAtK^4SzAUKV8%hlZ8#He39Y>Ei@6ngtJ@??t{CrtyshYZaD&$w)*r=_f7ldNMT`NcJQ6?p!pAC?QPXe;aQZT(W+cwhvZ>1Qt;}`#kB^#pHseV z5{|@_w`>|7kEhe=Q}sR|b>3O=Ls0U|m!+kpAf$oJ9b1A<3&rdX{08>**J1`v{zXE9 zNoqd{tEsMjyYde3{zW2|dqr9>Bs8?Cu@N+l*HC`GA;l^*Bm}TZ9EH-nKMjXnc*6R} z1`{P%EK03a*UPl#uoddfuU^GF(uMzw0;Rg^u_MK-ZzvB&zMJ2(@n zmV{7b?0+W$LkarpDHTlmm~Yr-9p(R0eLb{#}yO(1P1yHHEw z=o^RoI2_K}+8T_F*tN-K8-a?sg;aD9%{O73;#$wIDRoQ1=V*_=eeEYzP$->u&Zj6% z=l8`Sm8Pesz0}0x)lK%6@`(e)N{bD~0;7P0(xm^--(NGsOft?tQ#LUA7j|5tz9onH SsUQ4k!LAxx7?m5`iTFQb=+N~5 delta 3429 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 diff --git a/collects/redex/private/bmps/metafunction-TL.png b/collects/redex/private/bmps/metafunction-TL.png index ce08c4c321d7b4f458640413a3bcde7fd7135b64..81a744f06dbadda70bbd4f0c00416ce9974f686f 100644 GIT binary patch delta 4273 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 P00000NkvXXu0mjflRZaT delta 1654 zcmV-+28sFXKHWZ$7Y@t_0ssI2c7;zI0018(u_fpjf0k*I*%*SLNsdf3b(s#CjakA& zV{m86XEtUJ4~@YcJ{DX>k=c0S=<4bsRtgMW5OZc@3^BkwW1IZU#-pR7w{G3i(b0MF z;>GRTx988FUt3!XU*bKdF}$&ad5r>t3u4Y}Odt@vyu4CUQetCcH*DCz{7U94r!fZa zNJM61e-{@QGMUU`dg46_GX`HsL}p`-e!sluG{)cy@n<%M{eI)(;$FRaMI;jE&YcUF z^B#p6TZG{c_SgHQWj4Nl|GurQ?Y(>VAP5Q%5BKu&f`^2B(c0R2`0!x>!0z3<>+0(G z9?YN*F=sYLx!C&Zn^X6%4YI=Bhz&SOr%*K)klFFDRvoQog!NI|fj*jdTJC5meDl02@?AX!L(o$Ad zW@2KpbLUP(-p9x1^y$;g2V#LnqXh>CH#awns{;~(&@vlWRaM2u$7^Y6nVFdd1O#Mc ze`Fw+u*}91h0uJ`R;*Zo92*!IxVX3ot7f49VVRBpMI>&Bxw*L;H*OR~%`9MrV401lG}x{f)PdQ{xxsH3Z;lKN4RN&H z_4V})3=B-Lasj|p&JBLUcynagvSr7P9b+%wx^?TJLx(0H{M~>9h)m^=MH8?mpCME{nH1Oof6F4B`)2B~8Jv|i_ z75DAickkZ4n>TO5^0ofA#eAn5%mH z_%V{7K|w*m&dv@1(ACvNp-`w)YD`QFd`V4B?bWMSAAR(ZP#^j~(EG#AV`gLSVZ321 zEiGY}*!}zWr>CcDX=xokeAvjy=&!&2Vy>#ItBW}@H|(+1+1UvIpwVbZZGL`!@4fe) zP@nZ3(D*Hf;W4u@?_s=qe|mb7laqskgI!%+>2&(0O`8%D5}1urMn*=3g@s{ZVE_OK zg7Wk8&CJY5B$AYrl%t~~67&1grAxDB%@Y0t{|idL<$Pr}<}r-7l9EzvY%G~frqO74 zJie!=2mVJv@bmNg^Upu4s;X!-T6}ywJTfN|i9S9)=g*%nFE1Y)e;hn<;>5OX+jtDu zEg+&BCP*fHc{uYM#{0(~eNau?yhg+}_^a)zvk7_H35I%F0S(V`Cj19i)&- zrB+o{nV6W2wQN^ge_J~=G-PIG#=I2=f*=Zo($Uc|fBt;Ye#J4f3JO8#yBy76Dn}h? zRQV)lHWn=Zu;@Ue$|pIqv0(X!MF$#HKFJ7{e^_*&SLKtL*;s)5!=eMdDxb{E#)9M@ z79Ap8=#fmslG&Kw{KKLHrDherOri)SB_+(h%{DeRzyA6wf0EhQ#>NKDYz*&*$<57W zcE{v5|FGylsmdoUvoRvfZ~kG?fl`%EW@cj;e)A8D4)hM+CONY)-}#3{hqwn5Vn8gJ zjrq+#EIQDra)e3CY%DYmb*JZHG#%KV`Y>Yav%*Ln#%WRA~ zu*}BjgZ=f6Wj3DPV400k2WCk_9g?`9h9Oe^A0`2srWzw--T(jq07*qoM6N<$f<$;X A;{X5v diff --git a/collects/redex/private/reduction-semantics.ss b/collects/redex/private/reduction-semantics.ss index a3a78bb33d..55a7978a09 100644 --- a/collects/redex/private/reduction-semantics.ss +++ b/collects/redex/private/reduction-semantics.ss @@ -523,38 +523,15 @@ (define (do-leaf stx orig-name lang name-table from to extras lang-id) (let* ([lang-nts (language-id-nts lang-id orig-name)] [rw-sc (λ (pat) (rewrite-side-conditions/check-errs lang-nts orig-name #t pat))]) - (let-values ([(name fresh-vars side-conditions/withs) (process-extras stx orig-name name-table extras)]) + (let-values ([(name sides/withs/freshs) (process-extras stx orig-name name-table extras)]) (let-values ([(names names/ellipses) (extract-names lang-nts orig-name #t from)]) (with-syntax ([side-conditions-rewritten (rw-sc from)] - [lhs-w/extras (rw-sc #`(side-condition #,from #,(bind-withs side-conditions/withs #'#t)))] + [lhs-w/extras (rw-sc #`(side-condition #,from #,(bind-withs orig-name #'#t sides/withs/freshs #'#t)))] [to to] [name name] [lang lang] [(names ...) names] - [(names/ellipses ...) names/ellipses] - [(fresh-var-clauses ...) - (map (λ (fv-clause) - (syntax-case fv-clause () - [x - (identifier? #'x) - #'[x (variable-not-in main 'x)]] - [(x name) - (identifier? #'x) - #'[x (let ([the-name (term name)]) - (verify-name-ok '#,orig-name the-name) - (variable-not-in main the-name))]] - [((y) (x ...)) - #`[(y #,'...) - (variables-not-in main - (map (λ (_ignore_) 'y) - (term (x ...))))]] - [((y) (x ...) names) - #`[(y #,'...) - (let ([the-names (term names)] - [len-counter (term (x ...))]) - (verify-names-ok '#,orig-name the-names len-counter) - (variables-not-in main the-names))]])) - fresh-vars)]) + [(names/ellipses ...) names/ellipses]) #`(do-leaf-match name `side-conditions-rewritten @@ -564,29 +541,52 @@ ;; show up in the `fresh' side-conditions, the bindings for the variables ;; show up in the withs, and the withs show up in the 'fresh' side-conditions (term-let ([names/ellipses (lookup-binding bindings 'names)] ...) - (term-let (fresh-var-clauses ...) - #,(bind-withs side-conditions/withs - #'(make-successful (term to)))))))))))) + #,(bind-withs orig-name #'main sides/withs/freshs + #'(make-successful (term to))))))))))) - ;; the withs and side-conditions come in backwards order - (define (bind-withs stx body) + ;; the withs, freshs, and side-conditions come in backwards order + (define (bind-withs orig-name main stx body) (let loop ([stx stx] [body body]) - (syntax-case stx (side-condition where) + (syntax-case stx (side-condition where fresh) [() body] [((where x e) y ...) (loop #'(y ...) #`(term-let ([x (term e)]) #,body))] [((side-condition s ...) y ...) - (loop #'(y ...) #`(and s ... #,body))]))) + (loop #'(y ...) #`(and s ... #,body))] + [((fresh x) y ...) + (identifier? #'x) + (loop #'(y ...) #`(term-let ([x (variable-not-in #,main 'x)]) #,body))] + [((fresh x name) y ...) + (identifier? #'x) + (loop #'(y ...) + #`(term-let ([x (let ([the-name (term name)]) + (verify-name-ok '#,orig-name the-name) + (variable-not-in #,main the-name))]) + #,body))] + [((fresh (y) (x ...)) z ...) + (loop #'(z ...) + #`(term-let ([(y #,'...) + (variables-not-in #,main + (map (λ (_ignore_) 'y) + (term (x ...))))]) + #,body))] + [((fresh (y) (x ...) names) z ...) + (loop #'(z ...) + #`(term-let ([(y #,'...) + (let ([the-names (term names)] + [len-counter (term (x ...))]) + (verify-names-ok '#,orig-name the-names len-counter) + (variables-not-in #,main the-names))]) + #,body))]))) (define (process-extras stx orig-name name-table extras) (let ([the-name #f] [the-name-stx #f] - [fresh-vars '()] - [side-conditions/withs '()]) + [sides/withs/freshs '()]) (let loop ([extras extras]) (cond - [(null? extras) (values the-name fresh-vars side-conditions/withs)] + [(null? extras) (values the-name sides/withs/freshs)] [else (syntax-case (car extras) (side-condition fresh where) [name @@ -618,39 +618,40 @@ (loop (cdr extras))))] [(fresh var ...) (begin - (set! fresh-vars + (set! sides/withs/freshs (append - (map (λ (x) - (syntax-case x () - [x - (identifier? #'x) - #'x] - [(x name) - (identifier? #'x) - #'(x name)] - [((ys dots2) (xs dots1)) - (and (eq? (syntax-e #'dots1) (string->symbol "...")) - (eq? (syntax-e #'dots2) (string->symbol "..."))) - #'((ys) (xs dots1))] - [((ys dots2) (xs dots1) names) - (and (eq? (syntax-e #'dots1) (string->symbol "...")) - (eq? (syntax-e #'dots2) (string->symbol "..."))) - #'((ys) (xs dots1) names)] - [x - (raise-syntax-error orig-name - "malformed fresh variable clause" - stx - #'x)])) - (syntax->list #'(var ...))) - fresh-vars)) + (reverse + (map (λ (x) + (syntax-case x () + [x + (identifier? #'x) + #'(fresh x)] + [(x name) + (identifier? #'x) + #'(fresh x name)] + [((ys dots2) (xs dots1)) + (and (eq? (syntax-e #'dots1) (string->symbol "...")) + (eq? (syntax-e #'dots2) (string->symbol "..."))) + #'(fresh (ys) (xs dots1))] + [((ys dots2) (xs dots1) names) + (and (eq? (syntax-e #'dots1) (string->symbol "...")) + (eq? (syntax-e #'dots2) (string->symbol "..."))) + #'(fresh (ys) (xs dots1) names)] + [x + (raise-syntax-error orig-name + "malformed fresh variable clause" + stx + #'x)])) + (syntax->list #'(var ...)))) + sides/withs/freshs)) (loop (cdr extras)))] [(side-condition exp ...) (begin - (set! side-conditions/withs (cons (car extras) side-conditions/withs)) + (set! sides/withs/freshs (cons (car extras) sides/withs/freshs)) (loop (cdr extras)))] [(where x e) (begin - (set! side-conditions/withs (cons (car extras) side-conditions/withs)) + (set! sides/withs/freshs (cons (car extras) sides/withs/freshs)) (loop (cdr extras)))] [(where . x) (raise-syntax-error orig-name "malformed where clause" stx (car extras))]