Re: Must have SINGLE input/Arg.
"John Nilsson [email protected] [concatenative]" <[email protected]> Tue, 12 Aug 2014 02:26:20 +0200
| Newsgroups | gmane.comp.lang.concatenative |
|---|---|
| Message-ID | <CALJ=KCqSPuB=VEqnu2EKe+xVLh=OBjBocCu4d6tA2u=W0HN0gg@mail.gmail.com> |
--001a11c2df92797986050063b8e2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable I was thinking that composition would also be partial evaluation. So the benefits of curried functions should be the same. Regarding evaluation I'm curious if there is something interesting to be found by looking at kappa calculus or similar first order system instead of full lambda calculus. Or in any case, aiming for a total language, so no bottom. Looking around recent papers from various researches it seems to me that one could get quite far that route. Possibly one has to introduce some disciplined way to do higher order things sooner or later though. BR, John On Mon, Aug 11, 2014 at 9:39 PM, John Meacham [email protected] [concatenative] <[email protected]> wrote: > > > However, they actually are not isomorphic and behave differently during > beta reduction, due to being able to perform shared computation in betwee= n > the passing of the arguments. for instance > > f =3D \x -> let bx =3D x^10 in \y -> bx + y > > when applied to just one argument will share the computation of > calculating the tenth power with all of its uses. > > When working with a lazy language you also have the fact that a tuple has > another value, namely the tuple itself being bottom in addition to each o= f > its components being bottom which means tupled arguments are different th= an > fully applied curried ones as they can take on more values. > > These are all good and useful things, being able to control sharing and > evaluation via proper use of currying is a very powerful tool for many > languages. > > John > > > > On Mon, Aug 11, 2014 at 12:17 PM, 'John Nilsson' [email protected] > [concatenative] <[email protected]> wrote: > >> >> >> One problem with currying is that it makes (A,B) -> C !=3D A -> B -> C != =3D B >> -> A -> C >> >> When in practice they should all be equal. >> >> My thinking is that this could be addressed by just making them equal so >> that >> >> (D -> B) (A,B -> C) =3D (A,D -> C) >> >> Now this gets a little problematic if we have (A,A -> A) >> >> So I suggest that we add bindings to the type and se argument lists not >> as ordered tuples, but more like first class environments. >> >> Thus the type above would be (x::A,y::A -> z::A) and composition would >> work as the ABCD case above. >> >> To allow composition with arbitrary name we can add a rename type so tha= t >> >> (x:a) (x::A,y::A -> z::A) =3D (a::A,y::A -> z::A) >> >> This would also mean that it is an environment with bindings that gets >> threaded through the program, and not a stack. >> >> BR, >> John >> =E2=80=94 >> Sent from Mailbox <https://www.dropbox.com/mailbox> >> >> >> On Mon, Aug 11, 2014 at 6:07 PM, chris glur [email protected] >> [concatenative] <[email protected]> wrote: >> >>> >>> >>> The 'impedance mismatch' [who introduced that term for >>> non-ElectricalEngineers?] problem of different numbers of >>> inputs & outputs of functions, is apparently the motivation >>> for the idea of passing a SINGLE stack. >>> And the ideas of 'currying'. >>> IMO, what matters, is reducing the human mental load. >>> Hiding N mental-chunks, by wrapping them in a stack >>> is fraudulent. >>> Yes, point-free is great. Everything 'popping-out' is just "it". >>> take it | wash it | cook it| eat it >>> Without even thinking about the theoretical aspects of >>> impedance mismatch when multiple input-args are needed, >>> it was obvious that the following 'schematic' does it: >>> -> set Arg2 >>> -> set Arg3 >>> Arg1-> DoA -> DoB(A,Arg2) -> DoC(B,Arg3) -> FinalResult. >>> So you set the extra Args, before the main composition starts, >>> and the relevant functions know where to get their extra args. >>> >>> Sure, it's not as neat looking, but the mental-load is less >>> than wrapping multiple args, to look like 'unary'. >>> >>> =3D=3D Chris Glur. >>> >> >> > > > -- > John Meacham - http://notanumber.net/ > >=20=20 > --001a11c2df92797986050063b8e2 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/htm= l4/strict.dtd"> <html> <head> </head> =20 <body style=3D"background-color: #fff;"> <span style=3D"display:none"> </span> <!--~-|**|PrettyHtmlStartT|**|-~--> <div id=3D"ygrp-mlmsg" style=3D"position:relative;"> <div id=3D"ygrp-msg" style=3D"z-index: 1;"> <!--~-|**|PrettyHtmlEndT|**|-~--> <div id=3D"ygrp-text" > =20=20=20=20=20=20 =20=20=20=20=20=20 <p><div dir=3D"ltr">I was thinking that composition would also be par= tial evaluation. So the benefits of curried functions should be the same.<d= iv><div><br></div><div>Regarding evaluation I'm curious if there is som= ething interesting to be found by looking at kappa calculus or similar firs= t order system instead of full lambda calculus. Or in any case, aiming for = a total language, so no bottom. Looking around recent papers from various r= esearches it seems to me that one could get quite far that route. Possibly = one has to introduce some disciplined way to do higher order things sooner = or later though.</div> <div><br></div><div>BR,<br></div><div>John</div><div><br></div></div></div>= <div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Mon, Aug 1= 1, 2014 at 9:39 PM, John Meacham <a href=3D"mailto:[email protected]">john@r= epetae.net</a> [concatenative] <span dir=3D"ltr"><<a href=3D"mailto:conc= [email protected]" target=3D"_blank">[email protected]<= /a>></span> wrote:<br> <blockquote class=3D"gmail_quote" style=3D"border-left:1px #ccc solid;"> <u></u> =20 <div style=3D"background-color:#fff;"> <span>=C2=A0</span> <div> <div> <div> =20=20=20=20=20=20 =20=20=20=20=20=20 <p></p><div dir=3D"ltr">However, they actually are not isomorphic and= behave differently during beta reduction, due to being able to perform sha= red computation in between the passing of the arguments. for instance<div> <br></div><div> f =3D \x -> let bx =3D x^10 in \y -> bx + y</div><div><br></div><div>= when applied to just one argument will share the computation of calculating= the tenth power with all of its uses.</div><div><br></div><div>When workin= g with a lazy language you also have the fact that a tuple has another valu= e, namely the tuple itself being bottom in addition to each of its componen= ts being bottom which means tupled arguments are different than fully appli= ed curried ones as they can take on more values.</div> <div><br></div><div>These are all good and useful things, being able to con= trol sharing and evaluation via proper use of currying is a very powerful t= ool for many languages.</div><div><br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2= =A0John</div><div> <br></div></div><div class=3D"gmail_extra"><div><div class=3D"h5"><br><br><= div class=3D"gmail_quote">On Mon, Aug 11, 2014 at 12:17 PM, 'John Nilss= on' <a href=3D"mailto:[email protected]" target=3D"_blank">[email protected]= u</a> [concatenative] <span dir=3D"ltr"><<a href=3D"mailto:concatenative= @yahoogroups.com" target=3D"_blank">[email protected]</a>></= span> wrote:<br> <blockquote class=3D"gmail_quote" style=3D"border-left:1px #ccc solid;"> <u></u> =20 <div style=3D"background-color:#fff;"> <span>=C2=A0</span> <div> <div> <div> =20=20=20=20=20=20 =20=20=20=20=20=20 <p> <span>One problem with currying is that it makes (A,B) -> C !=3D A ->= B -> C !=3D B -> A -> C</span></p><div><br></div> <div>When in practice they should all be equal.</div> <div><br></div> <div>My thinking is that this could be addressed by just making them equal = so that</div> <div><br></div> <div>(<span>D -> B)=C2=A0</span><span>(A,B -> C) =3D (A,D -> C)</s= pan> </div> <div><br></div> <div>Now this gets a little problematic if we have (A,A -> A)</div> <div><br></div> <div>So I suggest that we add bindings to the type and se argument lists no= t as ordered tuples, but more like first class environments.</div> <div><br></div> <div>Thus the type above would be (x::A,<span>y::A -> z::A) and composit= ion would work as the ABCD case above.</span> </div> <div><span><br></span></div> <div><span>To allow composition with arbitrary name we can add a rename typ= e so that</span></div> <div><span><br></span></div> <div> <span>(x:a)=C2=A0</span><span>(x::A,y::A -> z::A) =3D=C2=A0</span><span>= (a::A,y::A -> z::A)</span> </div> <div><span><br></span></div> <div><span>This would also mean that it is an environment with bindings tha= t gets threaded through the program, and not a stack.</span></div> <div><span><br></span></div> <div><span>BR,</span></div> <div><span>John</span></div><div>=E2=80=94<br>Sent from <a href=3D"https://= www.dropbox.com/mailbox" target=3D"_blank">Mailbox</a> </div><div> <br><br><div class=3D"gmail_quote"><p>On Mon, Aug 11, 2014 at 6:07 PM, chri= s glur <a href=3D"mailto:[email protected]" target=3D"_blank">[email protected]= om</a> [concatenative] <span dir=3D"ltr"><<a href=3D"mailto:concatenativ= [email protected]" target=3D"_blank">[email protected]</a>><= /span> wrote:<br> </p><blockquote class=3D"gmail_quote" style=3D"border-left:1px #ccc solid;"= > <span>=C2=A0</span><div> <div> <div> =20=20=20=20=20=20 =20=20=20=20=20=20 <p>The 'impedance mismatch' [who introduced that term for<br> non-ElectricalEngineers?] problem of different numbers of<br> inputs & outputs of functions, is apparently the motivation<br> for the idea of passing a SINGLE stack.<br> And the ideas of 'currying'.<br> IMO, what matters, is reducing the human mental load.<br> Hiding N mental-chunks, by wrapping them in a stack<br> is fraudulent.<br> Yes, point-free is great. Everything 'popping-out' is just "it= ".<br> take it | wash it | cook it| eat it<br> Without even thinking about the theoretical aspects of<br> impedance mismatch when multiple input-args are needed,<br> it was obvious that the following 'schematic' does it:<br> -> set Arg2<br> -> set Arg3<br> Arg1-> DoA -> DoB(A,Arg2) -> DoC(B,Arg3) -> FinalResult.<br> So you set the extra Args, before the main composition starts,<br> and the relevant functions know where to get their extra args.<br><br> Sure, it's not as neat looking, but the mental-load is less<br> than wrapping multiple args, to look like 'unary'.<br><br> =3D=3D Chris Glur.<br></p> </div> =20=20=20=20=20 =20=20=20=20 <div style=3D"color:#fff;min-height:0;"></div> </div></div></blockquote></div><br></div><p></p> </div> =20=20=20=20=20 =20=20=20=20 <div style=3D"color:#fff;min-height:0;"></div> </div> =20=20 </div></div></blockquote></div><br><br clear=3D"all"><div><br></div></div><= /div>-- <br>John Meacham - <a href=3D"http://notanumber.net/" target=3D"_bl= ank">http://notanumber.net/</a> </div> <p></p> </div> =20=20=20=20=20 =20=20=20=20 <div style=3D"color:#fff;min-height:0;"></div> </div> =20=20 </div></div></blockquote></div><br></div> </p> </div> =20=20=20=20=20 <!--~-|**|PrettyHtmlStart|**|-~--> <div style=3D"color: #fff; height: 0;">__._,_.___</div> =20=20=20=20=20=20=20=20=20=20 =20=20 =20 =20=20=20=20 <div style=3D"clear:both"> </div> <div id=3D"fromDMARC" style=3D"margin-top: 10px;"> <hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background= -color:#E3E3E3;"> Posted by: John Nilsson <[email protected]> <hr style=3D= "height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;"> </div> <div style=3D"clear:both"> </div> <table cellspacing=3D4px style=3D"margin-top: 10px; margin-bottom: 10px= ; color: #2D50FD;"> <tbody> <tr> <td style=3D"font-size: 12px; font-family: arial; font-weight: bo= ld; padding: 7px 5px 5px;" > <a style=3D"text-decoration: none; color: #2D50FD= " href=3D"https://groups.yahoo.com/neo/groups/concatenative/conversations/m= essages/5011;_ylc=3DX3oDMTJwcDRqNTl0BF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3J= wc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzUwMTEEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxNDA3OD= AzMTgx?act=3Dreply&messageNum=3D5011">Reply via web post</a> </td> <td>•</td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px;" > <a href=3D"mailto:[email protected]?subject=3DRe%3A%20%5Bstack%5D= %20Must%20have%20SINGLE%20input%2FArg%2E" style=3D"text-decoration: none; c= olor: #2D50FD;"> Reply to sender </a> </td> <td>•</td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px;"> <a href=3D"mailto:[email protected]?subject=3DRe%3A= %20%5Bstack%5D%20Must%20have%20SINGLE%20input%2FArg%2E" style=3D"text-decor= ation: none; color: #2D50FD"> Reply to group </a> </td> <td>•</td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px;" > <a href=3D"https://groups.yahoo.com/neo/groups/concatenative/co= nversations/newtopic;_ylc=3DX3oDMTJlanM1b212BF9TAzk3MzU5NzE0BGdycElkAzE4Mzk= yNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQwNzgwMzE4MQ= --" style=3D"text-decoration: none; color: #2D50FD">Start a New Topic</a> </td> <td>•</td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px;color: #2D50FD;" > <a href=3D"https://groups.yahoo.com/neo/groups/= concatenative/conversations/topics/5008;_ylc=3DX3oDMTM0Y3Eza2xvBF9TAzk3MzU5= NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzUwMTEEc2VjA2Z0cgR= zbGsDdnRwYwRzdGltZQMxNDA3ODAzMTgxBHRwY0lkAzUwMDg-" style=3D"text-decoration= : none; color: #2D50FD;">Messages in this topic</a> (4) </td> </tr> </tbody> </table> =20=20=20=20=20=20=20=20 <!------- Start Nav Bar ------> =20 <!-- |**|begin egp html banner|**| --> <div id=3D"ygrp-vital" style=3D"background-color: #f2f2f2; font-family: Ver= dana; font-size: 10px; margin-bottom: 10px; padding: 10px;"> <span id=3D"vithd" style=3D"font-weight: bold; color: #333; text-transf= orm: uppercase; "><a href=3D"https://groups.yahoo.com/neo/groups/concatenat= ive/info;_ylc=3DX3oDMTJlNjA1cTNqBF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3B= JZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQwNzgwMzE4MQ--" style=3D= "text-decoration: none;">Visit Your Group</a></span> <ul style=3D"list-style-type: none; margin: 0; padding: 0; display: in= line;"> </ul> </div> <div id=3D"ft" style=3D"font-family: Arial; font-size: 11px; margin-top: 5p= x; padding: 0 2px 0 0; clear: both;"> <a href=3D"https://groups.yahoo.com/neo;_ylc=3DX3oDMTJkcjU4cTJ1BF9TAzk3ND= c2NTkwBGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzd= GltZQMxNDA3ODAzMTgx" style=3D"float: left;"><img src=3D"http://l.yimg.com/r= u/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height=3D"15"= width=3D"137" alt=3D"Yahoo! Groups" style=3D"border: 0;"/></a> <div style=3D"color: #747575; float: right;"> • <a href=3D"https://i= nfo.yahoo.com/privacy/us/yahoo/groups/details.html" style=3D"text-decoratio= n: none;">Privacy</a> • <a href=3D"mailto:concatenative-unsubscribe@ya= hoogroups.com?subject=3DUnsubscribe" style=3D"text-decoration: none;">Unsub= scribe</a> • <a href=3D"https://info.yahoo.com/legal/us/yahoo/utos/ter= ms/" style=3D"text-decoration: none;">Terms of Use</a> </div> </div> <br> <!-- |**|end egp html banner|**| --> </div> <!-- ygrp-msg --> =20 <!-- Sponsor --> <!-- |**|begin egp html banner|**| --> <div id=3D"ygrp-sponsor" style=3D"width:160px; float:right; clear:none; m= argin:0 0 25px 0; background: #fff;"> <!-- Start Recommendations --> <div id=3D"ygrp-reco"> </div> <!-- End Recommendations --> </div> <!-- |**|end egp html banner|**| --> <div style=3D"clear:both; color: #FFF; font-size:1px;">.</div> </div> <img src=3D"http://geo.yahoo.com/serv?s=3D97359714/grpId=3D1839274/grpspI= d=3D1705006764/msgId=3D5011/stime=3D1407803181" width=3D"1" height=3D"1"> <= br> <img src=3D"http://y.analytics.yahoo.com/fpc.pl?ywarid=3D515FB27823A7407E&a= =3D10001310322279&js=3Dno&resp=3Dimg" width=3D"1" height=3D"1">=20 <div style=3D"color: #fff; height: 0;">__,_._,___</div> <!--~-|**|PrettyHtmlEnd|**|-~--> </body> <!--~-|**|PrettyHtmlStart|**|-~--> <head> <style type=3D"text/css"> <!-- #ygrp-mkp { border: 1px solid #d8d8d8; font-family: Arial; margin: 10px 0; padding: 0 10px; } #ygrp-mkp hr { border: 1px solid #d8d8d8; } #ygrp-mkp #hd { color: #628c2a; font-size: 85%; font-weight: 700; line-height: 122%; margin: 10px 0; } #ygrp-mkp #ads { margin-bottom: 10px; } #ygrp-mkp .ad { padding: 0 0; } #ygrp-mkp .ad p { margin: 0; } #ygrp-mkp .ad a { color: #0000ff; text-decoration: none; } #ygrp-sponsor #ygrp-lc { font-family: Arial; } #ygrp-sponsor #ygrp-lc #hd { margin: 10px 0px; font-weight: 700; font-size: 78%; line-height: 122%; } #ygrp-sponsor #ygrp-lc .ad { margin-bottom: 10px; padding: 0 0; } #actions { font-family: Verdana; font-size: 11px; padding: 10px 0; } #activity { background-color: #e0ecee; float: left; font-family: Verdana; font-size: 10px; padding: 10px; } #activity span { font-weight: 700; } #activity span:first-child { text-transform: uppercase; } #activity span a { color: #5085b6; text-decoration: none; } #activity span span { color: #ff7900; } #activity span .underline { text-decoration: underline; } .attach { clear: both; display: table; font-family: Arial; font-size: 12px; padding: 10px 0; width: 400px; } .attach div a { text-decoration: none; } .attach img { border: none; padding-right: 5px; } .attach label { display: block; margin-bottom: 5px; } .attach label a { text-decoration: none; } =20=20 blockquote { margin: 0 0 0 4px; } .bold { font-family: Arial; font-size: 13px; font-weight: 700; } .bold a { text-decoration: none; } dd.last p a { font-family: Verdana; font-weight: 700; } dd.last p span { margin-right: 10px; font-family: Verdana; font-weight: 700; } dd.last p span.yshortcuts { margin-right: 0; } div.attach-table div div a { text-decoration: none; } div.attach-table { width: 400px; } div.file-title a, div.file-title a:active, div.file-title a:hover, div.fi= le-title a:visited { text-decoration: none; } div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div= .photo-title a:visited { text-decoration: none; } div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts { font-family: Verdana; font-size: 10px; font-weight: normal; } .green { color: #628c2a; } .MsoNormal { margin: 0 0 0 0; } o { font-size: 0; } #photos div { float: left; width: 72px; } #photos div div { border: 1px solid #666666; height: 62px; overflow: hidden; width: 62px; } #photos div label { color: #666666; font-size: 10px; overflow: hidden; text-align: center; white-space: nowrap; width: 64px; } #reco-category { font-size: 77%; } #reco-desc { font-size: 77%; } .replbq { margin: 4px; } #ygrp-actbar div a:first-child { /* border-right: 0px solid #000;*/ margin-right: 2px; padding-right: 5px; } #ygrp-mlmsg { font-size: 13px; font-family: Arial, helvetica,clean, sans-serif; *font-size: small; *font: x-small; } #ygrp-mlmsg table { font-size: inherit; font: 100%; } #ygrp-mlmsg select, input, textarea { font: 99% Arial, Helvetica, clean, sans-serif; } #ygrp-mlmsg pre, code { font:115% monospace; *font-size:100%; } #ygrp-mlmsg * { line-height: 1.22em; } #ygrp-mlmsg #logo { padding-bottom: 10px; } #ygrp-msg p a { font-family: Verdana; } #ygrp-msg p#attach-count span { color: #1E66AE; font-weight: 700; } #ygrp-reco #reco-head { color: #ff7900; font-weight: 700; } #ygrp-reco { margin-bottom: 20px; padding: 0px; } #ygrp-sponsor #ov li a { font-size: 130%; text-decoration: none; } #ygrp-sponsor #ov li { font-size: 77%; list-style-type: square; padding: 6px 0; }=20 #ygrp-sponsor #ov ul { margin: 0; padding: 0 0 0 8px; } #ygrp-text { font-family: Georgia; } #ygrp-text p { margin: 0 0 1em 0; } #ygrp-text tt { font-size: 120%; } #ygrp-vital ul li:last-child { border-right: none !important;=20 }=20 --> </style> </head> <!--~-|**|PrettyHtmlEnd|**|-~--> </html> <!-- end group email --> --001a11c2df92797986050063b8e2--