Standard-Types.xhtml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg">
  3. <head>
  4. <title>Standard Types</title>
  5. <link rel="stylesheet" type="text/css" href="docbook-epub.css"/>
  6. <link rel="stylesheet" type="text/css" href="kawa.css"/>
  7. <script src="kawa-ebook.js" type="text/javascript"/>
  8. <meta name="generator" content="DocBook XSL-NS Stylesheets V1.79.1"/>
  9. <link rel="prev" href="Types.xhtml" title="Types"/>
  10. <link rel="next" href="Parameterized-Types.xhtml" title="Parameterized Types"/>
  11. </head>
  12. <body>
  13. <header/>
  14. <section class="sect1" title="Standard Types" epub:type="subchapter" id="Standard-Types">
  15. <div class="titlepage">
  16. <div>
  17. <div>
  18. <h2 class="title" style="clear: both">Standard Types</h2>
  19. </div>
  20. </div>
  21. </div>
  22. <p>These types are predefined with the following names.
  23. </p>
  24. <p>Instead of plain <code class="literal"><em class="replaceable"><code>typename</code></em></code> you can also use
  25. the syntax <code class="literal">&lt;<em class="replaceable"><code>typename</code></em>&gt;</code> with angle brackets,
  26. but that syntax is no longer recommended, because it doesn’t
  27. “fit” as well with some ways type names are used.
  28. </p>
  29. <p>To find which Java classes these types map into, look in
  30. <code class="literal">kawa/standard/Scheme.java</code>.
  31. </p>
  32. <p>Note that the value of these variables are instances
  33. of <code class="literal">gnu.bytecode.Type</code>,
  34. not (as you might at first expect) <code class="literal">java.lang.Class</code>.
  35. </p>
  36. <p>The numeric types (<code class="literal">number</code>, <code class="literal">quantity</code>,
  37. <code class="literal">complex</code>, <code class="literal">real</code>, <code class="literal">rational</code>, <code class="literal">integer</code>,
  38. <code class="literal">long</code>, <code class="literal">int</code>, <code class="literal">short</code>, <code class="literal">byte</code>
  39. <code class="literal">ulong</code>, <code class="literal">uint</code>, <code class="literal">ushort</code>, <code class="literal">ubyte</code>,
  40. <code class="literal">double</code>, <code class="literal">float</code>)
  41. are discussed in <a class="link" href="Numerical-types.xhtml" title="Numerical types">Numerical types</a>.
  42. </p>
  43. <p>The types <code class="literal">character</code> and <code class="literal">char</code>
  44. are discussed in <a class="link" href="Characters.xhtml" title="Characters">Characters</a>.
  45. </p>
  46. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871985744" class="indexterm"/> <code class="varname">Object</code></p>
  47. <div class="blockquote">
  48. <blockquote class="blockquote">
  49. <p>An arbitrary Scheme value - and hence an arbitrary Java object.
  50. </p>
  51. </blockquote>
  52. </div>
  53. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871982736" class="indexterm"/> <code class="varname">symbol</code></p>
  54. <div class="blockquote">
  55. <blockquote class="blockquote">
  56. <p>The type of Scheme symbols.
  57. (Implemented using the Java class <code class="literal">gnu.mapping.Symbol</code>.)
  58. (<span class="emphasis"><em>Compatibility:</em></span> Previous versions of Kawa implemented
  59. a simple Scheme symbol using an interned <code class="literal">java.lang.String</code>.)
  60. </p>
  61. </blockquote>
  62. </div>
  63. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871978352" class="indexterm"/> <code class="varname">keyword</code></p>
  64. <div class="blockquote">
  65. <blockquote class="blockquote">
  66. <p>The type of keyword values. See <a class="link" href="Keywords.xhtml" title="Keywords">Keywords</a>.
  67. </p>
  68. </blockquote>
  69. </div>
  70. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871974688" class="indexterm"/> <code class="varname">list</code></p>
  71. <div class="blockquote">
  72. <blockquote class="blockquote">
  73. <p>The type of Scheme lists (pure and impure, including the empty list).
  74. </p>
  75. </blockquote>
  76. </div>
  77. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871971680" class="indexterm"/> <code class="varname">pair</code></p>
  78. <div class="blockquote">
  79. <blockquote class="blockquote">
  80. <p>The type of Scheme pairs. This is a sub-type of <code class="literal">list</code>.
  81. </p>
  82. </blockquote>
  83. </div>
  84. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871968272" class="indexterm"/> <code class="varname">string</code></p>
  85. <div class="blockquote">
  86. <blockquote class="blockquote">
  87. <p>The type of Scheme strings.
  88. (Implemented using <code class="literal">java.lang.String</code> for immutable strings,
  89. and <code class="literal">gnu.lists.FString</code> for mutable strings.
  90. Both of these implement the interface <code class="literal">java.lang.CharSequence</code>.
  91. In the future, we may change the representation for strings
  92. containing “surrogate characters”, for efficient indexing.)
  93. (<span class="emphasis"><em>Compatibility:</em></span> Previous versions of Kawa
  94. always used <code class="literal">gnu.lists.FString</code>.)
  95. </p>
  96. </blockquote>
  97. </div>
  98. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871962848" class="indexterm"/> <code class="varname">character</code></p>
  99. <div class="blockquote">
  100. <blockquote class="blockquote">
  101. <p>The type of Scheme character values. This is a sub-type of
  102. <code class="literal">Object</code>, in contrast to type <code class="literal">char</code>, which is the
  103. primitive Java <code class="literal">char</code> type.
  104. </p>
  105. </blockquote>
  106. </div>
  107. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871958480" class="indexterm"/> <code class="varname">vector</code></p>
  108. <div class="blockquote">
  109. <blockquote class="blockquote">
  110. <p>The type of Scheme vectors.
  111. </p>
  112. </blockquote>
  113. </div>
  114. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871955504" class="indexterm"/> <code class="varname">procedure</code></p>
  115. <div class="blockquote">
  116. <blockquote class="blockquote">
  117. <p>The type of Scheme procedures.
  118. </p>
  119. </blockquote>
  120. </div>
  121. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871952528" class="indexterm"/> <code class="varname">input-port</code></p>
  122. <div class="blockquote">
  123. <blockquote class="blockquote">
  124. <p>The type of Scheme input ports.
  125. </p>
  126. </blockquote>
  127. </div>
  128. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871949552" class="indexterm"/> <code class="varname">output-port</code></p>
  129. <div class="blockquote">
  130. <blockquote class="blockquote">
  131. <p>The type of Scheme output ports.
  132. </p>
  133. </blockquote>
  134. </div>
  135. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871946576" class="indexterm"/> <code class="varname">String</code></p>
  136. <div class="blockquote">
  137. <blockquote class="blockquote">
  138. <p>This type name is a special case. It specifies the class
  139. <code class="literal">java.lang.String</code>.
  140. However, coercing a value to <code class="literal">String</code> is done by
  141. invoking the <code class="literal">toString</code> method on the value to be coerced.
  142. Thus it "works" for all objects.
  143. It also works for <code class="literal">#!null</code>.
  144. </p>
  145. <p>When Scheme code invokes a Java method, any parameter
  146. whose type is <code class="literal">java.lang.String</code> is converted
  147. as if it was declared as a <code class="literal">String</code>.
  148. </p>
  149. </blockquote>
  150. </div>
  151. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871940336" class="indexterm"/> <code class="varname">parameter</code></p>
  152. <div class="blockquote">
  153. <blockquote class="blockquote">
  154. <p>A parameter object, as created by <code class="literal">make-parameter</code>.
  155. This type can take a type parameter (sic):
  156. </p>
  157. <pre class="screen">(define-constant client ::parameter[Client] (make-parameter #!null))
  158. </pre>
  159. <p>This lets Kawa know that reading the parameter (as in <code class="literal">(client)</code>)
  160. returns a value of the specified type (in this case <code class="literal">Client</code>).
  161. </p>
  162. </blockquote>
  163. </div>
  164. <p>More will be added later.
  165. </p>
  166. <p>A type specifier can also be one of the primitive Java types.
  167. The numeric types <code class="literal">long</code>, <code class="literal">int</code>, <code class="literal">short</code>,
  168. <code class="literal">byte</code>, <code class="literal">float</code>, and <code class="literal">double</code> are converted from the
  169. corresponding Scheme number classes. Similarly, <code class="literal">char</code>
  170. can be converted to and from Scheme characters. The type
  171. <code class="literal">boolean</code> matches any object, and the result is <code class="literal">false</code>
  172. if and only if the actual argument is <code class="literal">#f</code>.
  173. (The value <code class="literal">#f</code> is identical to <code class="literal">Boolean.FALSE</code>,
  174. and <code class="literal">#t</code> is identical to <code class="literal">Boolean.TRUE</code>.)
  175. The return type <code class="literal">void</code> indicates that no value is returned.
  176. </p>
  177. <p>A type specifier can also be a fully-qualified Java class name
  178. (for example <code class="literal">java.lang.StringBuffer</code>). In that case,
  179. the actual argument is cast at run time to the named class.
  180. Also, <code class="literal">java.lang.StringBuffer[]</code> represents
  181. an array of references to <code class="literal">java.lang.StringBuffer</code> objects.
  182. </p>
  183. <span id="dynamic-type"/>
  184. <p class="synopsis" kind="Variable"><span class="kind">Variable</span><span class="ignore">: </span><a id="idm139667871925472" class="indexterm"/> <code class="varname">dynamic</code></p>
  185. <div class="blockquote">
  186. <blockquote class="blockquote">
  187. <p>Used to specify that the type is unknown, and is likely to change
  188. at run-time.
  189. Warnings about unknown member names are supressed
  190. (a run-time name lookup is formed).
  191. An expression of type <code class="literal">dynamic</code> is (statically) compatible with
  192. any type.
  193. </p>
  194. </blockquote>
  195. </div>
  196. </section>
  197. <footer>
  198. <div class="navfooter">
  199. <p>
  200. Up: <a accesskey="u" href="Types.xhtml">Types</a></p>
  201. <p>
  202. Next: <a accesskey="n" href="Parameterized-Types.xhtml">Parameterized Types</a></p>
  203. </div>
  204. </footer>
  205. </body>
  206. </html>