[stack] positional postfix evaluation

Robbert van Dalen <[email protected]> Mon, 27 May 2013 21:30:51 +0200
Newsgroups gmane.comp.lang.concatenative
Message-ID <[email protected]>
--AWpatqq4u80jAtCK7-zPw1AIbUpMqxcnuNIJr9f
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

positional postfix evaluation

- please set the font to mono-spaced for better readability -

this short post describes a novel (postfix) computational model that may interest you.
it has the following properties:

1) atoms in (sub)expressions take position and are evaluated in-position
2) an atom can be a subexpression, syntactically surrounded by parenthesis
3) parenthesis are transparent, while evaluating an expression
4) expressions are evaluated in parallel

let me present the canonical example:

1 2 + 3 4 + * =>
    3     7 * =>
           21

.. demonstrating property 1 and 4.

so why the need for positions?
it allows the data flow of a program to be easily eyeballed.

here is another example:

(1 2) + 3 (4 (+ *)) =>
      3   (  (7 *)) =>
          (   (21))

.. which demonstrates property 2 and 3. 
it also demonstrates that parenthesis - which are transparent - retain their position after evaluation.

but notice that the postfix evaluation of subexpressions are less easily eyeballed.
so why the need for subexpressions and parenthesis? 

solely because of efficiency reasons. 
the following example shows the efficient in-place substitution and evaluation of subexpressions:

e1 == 1 2 +
e1 =>     3

e2 == 3 4 +
e2 =>     7

e3 == e1 e2 *
e3 == (1 2 +) (3 4 +) *
e3 => (    3) (    7) *
e3 =>                21

here is an 'explicit' positional representation of the same substitutions:

e1 == 0=1 1=2 2=+
e1 =>         2=3

e2 == 0=3 1=4 2=+
e2 =>         2=7

e3 == e1 e2 *
e3 => 0=(0=1 1=2 2=+) 1=(0=3 1=4 2=+) 2=*
e3 => 0=(        2=3) 1=(        2=7) 2=*
e3 =>                                 2=21

note that all this is implemented in the spread programming language v0.2.

care to comment?
please do!

cheers,
robbert




[Non-text portions of this message have been removed]


--AWpatqq4u80jAtCK7-zPw1AIbUpMqxcnuNIJr9f
Content-Type: text/html; charset=US-ASCII
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">&nbsp;</span>

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id="ygrp-mlmsg" style="position:relative;">
  <div id="ygrp-msg" style="z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id="ygrp-text" >
      
      
      <p>positional postfix evaluation<br>
<br>
- please set the font to mono-spaced for better readability -<br>
<br>
this short post describes a novel (postfix) computational model that may interest you.<br>
it has the following properties:<br>
<br>
1) atoms in (sub)expressions take position and are evaluated in-position<br>
2) an atom can be a subexpression, syntactically surrounded by parenthesis<br>
3) parenthesis are transparent, while evaluating an expression<br>
4) expressions are evaluated in parallel<br>
<br>
let me present the canonical example:<br>
<br>
1 2 + 3 4 + * =&gt;<br>
    3     7 * =&gt;<br>
           21<br>
<br>
.. demonstrating property 1 and 4.<br>
<br>
so why the need for positions?<br>
it allows the data flow of a program to be easily eyeballed.<br>
<br>
here is another example:<br>
<br>
(1 2) + 3 (4 (+ *)) =&gt;<br>
      3   (  (7 *)) =&gt;<br>
          (   (21))<br>
<br>
.. which demonstrates property 2 and 3. <br>
it also demonstrates that parenthesis - which are transparent - retain their position after evaluation.<br>
<br>
but notice that the postfix evaluation of subexpressions are less easily eyeballed.<br>
so why the need for subexpressions and parenthesis? <br>
<br>
solely because of efficiency reasons. <br>
the following example shows the efficient in-place substitution and evaluation of subexpressions:<br>
<br>
e1 == 1 2 +<br>
e1 =&gt;     3<br>
<br>
e2 == 3 4 +<br>
e2 =&gt;     7<br>
<br>
e3 == e1 e2 *<br>
e3 == (1 2 +) (3 4 +) *<br>
e3 =&gt; (    3) (    7) *<br>
e3 =&gt;                21<br>
<br>
here is an &#39;explicit&#39; positional representation of the same substitutions:<br>
<br>
e1 == 0=1 1=2 2=+<br>
e1 =&gt;         2=3<br>
<br>
e2 == 0=3 1=4 2=+<br>
e2 =&gt;         2=7<br>
<br>
e3 == e1 e2 *<br>
e3 =&gt; 0=(0=1 1=2 2=+) 1=(0=3 1=4 2=+) 2=*<br>
e3 =&gt; 0=(        2=3) 1=(        2=7) 2=*<br>
e3 =&gt;                                 2=21<br>
<br>
note that all this is implemented in the spread programming language v0.2.<br>
<br>
care to comment?<br>
please do!<br>
<br>
cheers,<br>
robbert<br>
<br>
[Non-text portions of this message have been removed]<br>
<br>
</p>

    </div>
     

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <div style="color: #fff; height: 0;">__._,_.___</div>

        
  
  
    <table cellspacing=4px style="margin-top: 20px; margin-bottom: 10px;">
      <tbody>
        <tr>
          <td style="font-size: 12px; font-family: arial; font-weight: bold; padding: 7px 5px 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA "  >
                          <a style="text-decoration: none; color: #2D50FD" href="">Reply via web post</a>
                      </td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; " >
            <a href="mailto:[email protected]?subject=Re%3A%20positional%20postfix%20evaluation" style="text-decoration: none; color: #2D50FD;">
              Reply to sender            </a> 
          </td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; ">
            <a href="mailto:[email protected]?subject=Re%3A%20positional%20postfix%20evaluation" style="text-decoration: none; color: #2D50FD">
              Reply to group            </a> 
          </td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; " >
            <a href="" style="text-decoration: none; color: #2D50FD">Start a New Topic</a>
          </td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px; color: #2D50FD; background-color: #F2F2F2; border: 1px solid #EAEAEA; " >
                            <a href="" style="text-decoration: none; color: #2D50FD;">Messages in this topic</a>
                ()
                      </td>
        </tr>
      </tbody>
    </table>

        
<!------- Start Nav Bar ------>

<!-- |**|begin egp html banner|**| -->
<div id="ygrp-vital" style="background-color: #f2f2f2; 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=X3oDMTJlZW41NGRiBF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTM2OTY4MzA2MQ--" 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="" 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> &bull; <a href="mailto:[email protected]?subject=Unsubscribe" style="text-decoration: none;">Unsubscribe</a> &bull; <a href="http://docs.yahoo.com/info/terms/" style="text-decoration: none;">Terms of Use</a> &bull; <a href="mailto:[email protected]?subject=Feedback on the redesigned individual mail v1" style="text-decoration: none;">Send us Feedback </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="" 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;
}

  #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-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 -->


--AWpatqq4u80jAtCK7-zPw1AIbUpMqxcnuNIJr9f--