[stack] Re: Jon Purdy: Why Concatenative Programming Matters
"Ruurd" <[email protected]> Sun, 25 Mar 2012 09:59:36 -0000
| Newsgroups | gmane.comp.lang.concatenative |
|---|---|
| Message-ID | <[email protected]> |
--kveCLOYQkBqBrPXW1zR1tL1n6iaIity7eJOv9yi
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Hi,
You don't have to add i/o primitives to your language. All computers=20
are permutations of a Turing machine and a Turing machine does not
have i/o.
First you put the brainfuck interpreter on tape, followed by the=20
brainfuck program, followed by the input that the brainfuck program=20
takes, if any.
You feed this tape to the program that interpretes the zeroone universal ev=
aluator and after executing, whatever is left on the tape
is the output.
The interpreter can read the tape and output what is there.
You can find the competitor here: http://homepages.cwi.nl/~tromp/cl/cl.html
The commandline to produce 'Hello, world!' is either:
cat bf.Blc hw.bf | ./blc m8 uni8.lam
or:
cat bf.Blc hw.bf | perl blc.pl -8
That last one is very slow and is less beautifull, because it has
the interpreter encoded in perl instead of in the lambda calculus.
The author switched from combinatory calculus to the lamda calculus,
because the last one is more descriptive. The comparison was made,
based on the size of the self-interpreter. I think that a comparison
based on a brainfuck interpreter is more realistic. Also, the
combinatory calculus was restricted to just S and K and I wonder
what difference it will make if more combinators are added.
Also, I wonder if the comparison is still in favor of the lambda
calculus when concatenative combinators are used instead.
It is not my personal quest to find an answer, that's why I am
asking.
R.
<wtanksleyjr@...> wrote:
>
> Ruurd <r.wiersma26@...> wrote:
> > Can zeroone be used to write a brainfuck interpreter in 112 bytes
> > or less ? That would be interesting.
>=20
> No, because zeroone's underlying machine has no i/o capability of any
> kind. The obvious question pops to mind: is it possible to make a
> zeroone with i/o?
--kveCLOYQkBqBrPXW1zR1tL1n6iaIity7eJOv9yi
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>
<body style="background-color: #fff;">
<span style="display:none"> </span>
<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id="ygrp-mlmsg" style="position:relative;">
<div id="ygrp-msg" style="z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->
<div id="ygrp-text" >
<p>Hi,<br>
<br>
You don't have to add i/o primitives to your language. All computers <br>
are permutations of a Turing machine and a Turing machine does not<br>
have i/o.<br>
<br>
First you put the brainfuck interpreter on tape, followed by the <br>
brainfuck program, followed by the input that the brainfuck program <br>
takes, if any.<br>
<br>
You feed this tape to the program that interpretes the zeroone universal evaluator and after executing, whatever is left on the tape<br>
is the output.<br>
The interpreter can read the tape and output what is there.<br>
<br>
You can find the competitor here: <a href="http://homepages.cwi.nl/~tromp/cl/cl.html">http://homepages.cwi.nl/~tromp/cl/cl.html</a><br>
<br>
The commandline to produce 'Hello, world!' is either:<br>
<br>
cat bf.Blc hw.bf | ./blc m8 uni8.lam<br>
<br>
or:<br>
<br>
cat bf.Blc hw.bf | perl blc.pl -8<br>
<br>
That last one is very slow and is less beautifull, because it has<br>
the interpreter encoded in perl instead of in the lambda calculus.<br>
The author switched from combinatory calculus to the lamda calculus,<br>
because the last one is more descriptive. The comparison was made,<br>
based on the size of the self-interpreter. I think that a comparison<br>
based on a brainfuck interpreter is more realistic. Also, the<br>
combinatory calculus was restricted to just S and K and I wonder<br>
what difference it will make if more combinators are added.<br>
Also, I wonder if the comparison is still in favor of the lambda<br>
calculus when concatenative combinators are used instead.<br>
<br>
It is not my personal quest to find an answer, that's why I am<br>
asking.<br>
<br>
R.<br>
<br>
<wtanksleyjr@...> wrote:<br>
><br>
> Ruurd <r.wiersma26@...> wrote:<br>
> > Can zeroone be used to write a brainfuck interpreter in 112 bytes<br>
> > or less ? That would be interesting.<br>
> <br>
> No, because zeroone's underlying machine has no i/o capability of any<br>
> kind. The obvious question pops to mind: is it possible to make a<br>
> zeroone with i/o?<br>
<br>
</p>
</div>
<!--~-|**|PrettyHtmlStart|**|-~-->
<div style="color: #fff; height: 0;">__._,_.___</div>
<div id="ygrp-actbar" style="clear: both; margin-bottom: 10px; white-space: nowrap; color: #666; padding-top: 15px;">
<div>
<a href="mailto:[email protected]?subject=Re%3A%20Jon%20Purdy%3A%20Why%20Concatenative%20Programming%20Matters" style="margin-right: 0; padding-right: 0;">
Reply to <span style="font-weight: 700;">sender</span></a> |
<a href="mailto:[email protected]?subject=Re%3A%20Jon%20Purdy%3A%20Why%20Concatenative%20Programming%20Matters">
Reply to <span style="font-weight: 700;">group</span></a> |
<a href="http://groups.yahoo.com/group/concatenative/post;_ylc=X3oDMTJwNGhuZ25lBF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzQ5MTMEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxMzMyNjY5NTgy?act=reply&messageNum=4913">Reply <span style="font-weight: 700;">via web post</span></a> |
<a href="http://groups.yahoo.com/group/concatenative/post;_ylc=X3oDMTJlOTNxYzQ2BF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTMzMjY2OTU4Mg--" style="font-weight: 700;">Start a New Topic</a>
</div>
<a href="http://groups.yahoo.com/group/concatenative/message/4883;_ylc=X3oDMTM0cmdhaDlpBF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzQ5MTMEc2VjA2Z0cgRzbGsDdnRwYwRzdGltZQMxMzMyNjY5NTgyBHRwY0lkAzQ4ODM-">Messages in this topic</a>
(<span style="font-weight: 700;">31</span>)
</div>
<!------- Start Nav Bar ------>
<!-- |**|begin egp html banner|**| -->
<div id="ygrp-vital" style="background-color: #e0ecee; font-family: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;">
<span id="vithd" style="font-weight: bold; color: #333; text-transform: uppercase; ">Recent Activity:</span>
<ul style="list-style-type: none; margin: 0; padding: 0; display: inline;">
</ul>
<div style="clear: both; padding-top: 2px; color: #1e66ae;">
<a href="http://groups.yahoo.com/group/concatenative;_ylc=X3oDMTJlaW4ybzJyBF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTMzMjY2OTU4Mg--" style="text-decoration: none;">Visit Your Group</a>
</div>
</div>
<div id="ft" style="font-family: Arial; font-size: 11px; margin-top: 5px; padding: 0 2px 0 0; clear: both;">
<a href="http://groups.yahoo.com/;_ylc=X3oDMTJkbm1zYXQ4BF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMzMyNjY5NTgy" style="float: left;"><img src="http://l.yimg.com/a/i/us/yg/logo/us.gif" height="15" width="137" alt="Yahoo! Groups" style="border: 0;"/></a>
<div style="color: #747575; float: right;">Switch to: <a href="mailto:[email protected]?subject=Change Delivery Format: Traditional" style="text-decoration: none;">Text-Only</a>, <a href="mailto:[email protected]?subject=Email Delivery: Digest" class="margin-rt" style="text-decoration: none;">Daily Digest</a> • <a href="mailto:[email protected]?subject=Unsubscribe" style="text-decoration: none;">Unsubscribe</a> • <a href="http://docs.yahoo.com/info/terms/" style="text-decoration: none;">Terms of Use</a></div>
</div>
<!-- |**|end egp html banner|**| -->
</div> <!-- ygrp-msg -->
<!-- Sponsor -->
<!-- |**|begin egp html banner|**| -->
<div id="ygrp-sponsor" style="width:160px; float:right; clear:none; margin:0 0 25px 0; background: #fff;">
<!-- Start Recommendations -->
<div id="ygrp-reco">
</div>
<!-- End Recommendations -->
</div> <!-- |**|end egp html banner|**| -->
<div style="clear:both; color: #FFF; font-size:1px;">.</div>
</div>
<img src="http://geo.yahoo.com/serv?s=97359714/grpId=1839274/grpspId=1705006764/msgId=4913/stime=1332669582/nc1=5758222/nc2=3848644/nc3=4507179" width="1" height="1"> <br>
<div style="color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</body>
<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
<style type="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;
}
a {
color: #1e66ae;
}
#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;
}
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.file-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-mlmsg a {
color: #1E66AE;
}
#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;
}
#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;
}
-->
</style>
</head>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->
--kveCLOYQkBqBrPXW1zR1tL1n6iaIity7eJOv9yi--