Field.html 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
  2. <html>
  3. <!-- Created on December 10, 2012 by texi2html 1.82
  4. texi2html was written by:
  5. Lionel Cons <[email protected]> (original author)
  6. Karl Berry <[email protected]>
  7. Olaf Bachmann <[email protected]>
  8. and many others.
  9. Maintained by: Many creative people.
  10. Send bugs and suggestions to <[email protected]>
  11. -->
  12. <head>
  13. <title>avram - a virtual machine code interpreter: 2.7.8.1 Field</title>
  14. <meta name="description" content="avram - a virtual machine code interpreter: 2.7.8.1 Field">
  15. <meta name="keywords" content="avram - a virtual machine code interpreter: 2.7.8.1 Field">
  16. <meta name="resource-type" content="document">
  17. <meta name="distribution" content="global">
  18. <meta name="Generator" content="texi2html 1.82">
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <style type="text/css">
  21. <!--
  22. a.summary-letter {text-decoration: none}
  23. blockquote.smallquotation {font-size: smaller}
  24. pre.display {font-family: serif}
  25. pre.format {font-family: serif}
  26. pre.menu-comment {font-family: serif}
  27. pre.menu-preformatted {font-family: serif}
  28. pre.smalldisplay {font-family: serif; font-size: smaller}
  29. pre.smallexample {font-size: smaller}
  30. pre.smallformat {font-family: serif; font-size: smaller}
  31. pre.smalllisp {font-size: smaller}
  32. span.roman {font-family:serif; font-weight:normal;}
  33. span.sansserif {font-family:sans-serif; font-weight:normal;}
  34. ul.toc {list-style: none}
  35. -->
  36. </style>
  37. </head>
  38. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  39. <a name="Field"></a>
  40. <table cellpadding="1" cellspacing="1" border="0">
  41. <tr><td valign="middle" align="left">[<a href="Deconstruction.html#Deconstruction" title="Previous section in reading order"> &lt; </a>]</td>
  42. <td valign="middle" align="left">[<a href="Fan.html#Fan" title="Next section in reading order"> &gt; </a>]</td>
  43. <td valign="middle" align="left"> &nbsp; </td>
  44. <td valign="middle" align="left">[<a href="Virtual-Machine-Specification.html#Virtual-Machine-Specification" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
  45. <td valign="middle" align="left">[<a href="Deconstruction.html#Deconstruction" title="Up section"> Up </a>]</td>
  46. <td valign="middle" align="left">[<a href="Library-Reference.html#Library-Reference" title="Next chapter"> &gt;&gt; </a>]</td>
  47. <td valign="middle" align="left"> &nbsp; </td>
  48. <td valign="middle" align="left"> &nbsp; </td>
  49. <td valign="middle" align="left"> &nbsp; </td>
  50. <td valign="middle" align="left"> &nbsp; </td>
  51. <td valign="middle" align="left">[<a href="avram.html#Top" title="Cover (top) of document">Top</a>]</td>
  52. <td valign="middle" align="left">[<a href="avram_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td>
  53. <td valign="middle" align="left">[<a href="Function-Index.html#Function-Index" title="Index">Index</a>]</td>
  54. <td valign="middle" align="left">[<a href="avram_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
  55. </tr></table>
  56. <hr size="1">
  57. <a name="Field-1"></a>
  58. <h4 class="subsubsection">2.7.8.1 Field</h4>
  59. <p>The virtual machine supports a generalization of the <code>left</code> and
  60. <a name="index-left-1"></a>
  61. <a name="index-right-1"></a>
  62. <code>right</code> deconstruction operations that is applicable to deeply nested
  63. structures. Use of this feature is conducive to code that is faster and
  64. more compact than is possible by relying on the primitive deconstructors
  65. alone. It may also be easier for a code optimizer to recognize and
  66. transform.
  67. </p>
  68. <p>The general form of a virtual code application to perform deconstruction
  69. is that it is a pair with a <code>nil</code> left side, and a non-<code>nil</code>
  70. right side. The right side indicates the nature of the deconstruction to
  71. be performed when the function is evaluated on an argument.
  72. </p>
  73. <p>To make the expression of deconstruction functions more readable in
  74. <code>silly</code>, the standard library contains the declaration
  75. </p>
  76. <table><tr><td>&nbsp;</td><td><pre class="example">field = couple(constant nil,identity)
  77. </pre></td></tr></table>
  78. <p>which implies the following theorem.
  79. </p>
  80. <dl compact="compact">
  81. <dt> <em>T13</em></dt>
  82. <dd><p>[[<code>field</code>]] <code><var>w</var></code> = <code>(nil,<var>w</var>)</code>
  83. </p></dd>
  84. </dl>
  85. <a name="index-field"></a>
  86. <p>The virtual machine recognizes an application in this form and evaluates
  87. it according to the following properties, where <code><var>u</var></code> and
  88. <code><var>v</var></code> are other than <code>nil</code>, but <code><var>x</var></code>,
  89. <code><var>y</var></code>, and <code><var>z</var></code> are unrestricted.
  90. </p>
  91. <dl compact="compact">
  92. <dt> <em>P10</em></dt>
  93. <dd><p>([[<code>field</code>]] <code>(<var>u</var>,nil)</code>) <code>(<var>x</var>,<var>y</var>)</code> = ([[<code>field</code>]] <code><var>u</var></code>) <code><var>x</var></code>
  94. </p></dd>
  95. <dt> <em>P11</em></dt>
  96. <dd><p>([[<code>field</code>]] <code>(nil,<var>v</var>)</code>) <code>(<var>x</var>,<var>y</var>)</code> = ([[<code>field</code>]] <code><var>v</var></code>) <code><var>y</var></code>
  97. </p></dd>
  98. <dt> <em>P12</em></dt>
  99. <dd><p>([[<code>field</code>]] <code>(<var>u</var>,<code>v</code>)</code>) <code><var>z</var></code> = <code>((</code>[[<code>field</code>]] <code><var>u</var>) <var>z</var>,(</code>[[<code>field</code>]] <code><var>v</var>) <var>z</var>)</code>
  100. </p></dd>
  101. </dl>
  102. <p>One might also add that ([[<code>field</code>]] <code>(nil,nil)</code>)
  103. <code><var>z</var></code> = <code><var>z</var></code>, but this statement would be equivalent to
  104. <em>P0</em>.
  105. </p>
  106. <p>A suitable choice of the <code>field</code> operand permits the implementation
  107. of any deconstruction function expressible in terms of <code>compose</code>,
  108. <code>couple</code>, <code>identity</code>, <code>left</code> and <code>right</code>. For
  109. example, the application <code>couple(compose(right,right),left)</code> has an
  110. equivalent representation in
  111. <code>field((nil,(nil,(nil,nil))),((nil,nil),nil))</code>. The latter looks
  112. longer in <code>silly</code> but is smaller and faster in virtual code.
  113. </p>
  114. <hr size="1">
  115. <table cellpadding="1" cellspacing="1" border="0">
  116. <tr><td valign="middle" align="left">[<a href="Deconstruction.html#Deconstruction" title="Previous section in reading order"> &lt; </a>]</td>
  117. <td valign="middle" align="left">[<a href="Fan.html#Fan" title="Next section in reading order"> &gt; </a>]</td>
  118. <td valign="middle" align="left"> &nbsp; </td>
  119. <td valign="middle" align="left">[<a href="Virtual-Machine-Specification.html#Virtual-Machine-Specification" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
  120. <td valign="middle" align="left">[<a href="Deconstruction.html#Deconstruction" title="Up section"> Up </a>]</td>
  121. <td valign="middle" align="left">[<a href="Library-Reference.html#Library-Reference" title="Next chapter"> &gt;&gt; </a>]</td>
  122. <td valign="middle" align="left"> &nbsp; </td>
  123. <td valign="middle" align="left"> &nbsp; </td>
  124. <td valign="middle" align="left"> &nbsp; </td>
  125. <td valign="middle" align="left"> &nbsp; </td>
  126. <td valign="middle" align="left">[<a href="avram.html#Top" title="Cover (top) of document">Top</a>]</td>
  127. <td valign="middle" align="left">[<a href="avram_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td>
  128. <td valign="middle" align="left">[<a href="Function-Index.html#Function-Index" title="Index">Index</a>]</td>
  129. <td valign="middle" align="left">[<a href="avram_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
  130. </tr></table>
  131. <p>
  132. <font size="-1">
  133. This document was generated on <i>December 10, 2012</i> using <a href="http://www.nongnu.org/texi2html/"><i>texi2html 1.82</i></a>.
  134. </font>
  135. <br>
  136. </p>
  137. </body>
  138. </html>