commit 69e9ed33df4c99868174e6fdf5e4ed263a21fcd8
parent ff20abb7979b296f637475caae5b187109c50cc1
Author: Andres Navarro <canavarro82@gmail.com>
Date: Thu, 29 Sep 2011 15:24:35 -0300
Merged some working changes from r7rs
Diffstat:
29 files changed, 1021 insertions(+), 418 deletions(-)
diff --git a/manual/html/Alphabetical-Index.html b/manual/html/Alphabetical-Index.html
@@ -0,0 +1,379 @@
+<html lang="en">
+<head>
+<title>Alphabetical Index - klisp Reference Manual</title>
+<meta http-equiv="Content-Type" content="text/html">
+<meta name="description" content="klisp Reference Manual">
+<meta name="generator" content="makeinfo 4.13">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Ports.html#Ports" title="Ports">
+<link rel="next" href="../index.html#dir" title="(dir)">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+ pre.display { font-family:inherit }
+ pre.format { font-family:inherit }
+ pre.smalldisplay { font-family:inherit; font-size:smaller }
+ pre.smallformat { font-family:inherit; font-size:smaller }
+ pre.smallexample { font-size:smaller }
+ pre.smalllisp { font-size:smaller }
+ span.sc { font-variant:small-caps }
+ span.roman { font-family:serif; font-weight:normal; }
+ span.sansserif { font-family:sans-serif; font-weight:normal; }
+--></style>
+</head>
+<body>
+<div class="node">
+<a name="Alphabetical-Index"></a>
+<p>
+Next: <a rel="next" accesskey="n" href="../index.html#dir">(dir)</a>,
+Previous: <a rel="previous" accesskey="p" href="Ports.html#Ports">Ports</a>,
+Up: <a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<!-- this is from the elisp manual... Should read a little about this. -->
+<h2 class="unnumbered">Index</h2>
+
+<ul class="index-fn" compact>
+<li><a href="Booleans.html#index-g_t_0024and_003f-17"><code>$and?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
+<li><a href="Environments.html#index-g_t_0024binds_003f-101"><code>$binds?</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Control.html#index-g_t_0024cond-31"><code>$cond</code></a>: <a href="Control.html#Control">Control</a></li>
+<li><a href="Environments.html#index-g_t_0024define_0021-99"><code>$define!</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Control.html#index-g_t_0024if-29"><code>$if</code></a>: <a href="Control.html#Control">Control</a></li>
+<li><a href="Environments.html#index-g_t_0024import_0021-113"><code>$import!</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Combiners.html#index-g_t_0024lambda-122"><code>$lambda</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Promises.html#index-g_t_0024lazy-143"><code>$lazy</code></a>: <a href="Promises.html#Promises">Promises</a></li>
+<li><a href="Environments.html#index-g_t_0024let-100"><code>$let</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Environments.html#index-g_t_0024let_002a-104"><code>$let*</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Environments.html#index-g_t_0024let_002dredirect-107"><code>$let-redirect</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Environments.html#index-g_t_0024let_002dsafe-108"><code>$let-safe</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Environments.html#index-g_t_0024letrec-105"><code>$letrec</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Environments.html#index-g_t_0024letrec_002a-106"><code>$letrec*</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Booleans.html#index-g_t_0024or_003f-18"><code>$or?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
+<li><a href="Environments.html#index-g_t_0024provide_0021-112"><code>$provide!</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Environments.html#index-g_t_0024remote_002deval-109"><code>$remote-eval</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Control.html#index-g_t_0024sequence-30"><code>$sequence</code></a>: <a href="Control.html#Control">Control</a></li>
+<li><a href="Environments.html#index-g_t_0024set_0021-111"><code>$set!</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Combiners.html#index-g_t_0024vau-119"><code>$vau</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Ports.html#index-g_t_0028-261"><code>(</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Numbers.html#index-g_t_0028-179"><code>(</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Continuations.html#index-g_t_0028-135"><code>(</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Environments.html#index-g_t_0028-110"><code>(</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Numbers.html#index-g_t_002a-166"><code>*</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-g_t_002b-165"><code>+</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-g_t_002d-167"><code>-</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-g_t_002f-193"><code>/</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-g_t_003c_003d_003f-162"><code><=?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-g_t_003c_003f-161"><code><?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-g_t_003d_003f-160"><code>=?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-g_t_003e_003d_003f-164"><code>>=?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-g_t_003e_003f-163"><code>>?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-acos-208"><code>acos</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Booleans.html#index-and_003f-15"><code>and?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
+<li><a href="Pairs-and-lists.html#index-append-81"><code>append</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-append_0021-89"><code>append!</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="A-Sample-Applicative-Description.html#index-applicative-descriptions-8">applicative descriptions</a>: <a href="A-Sample-Applicative-Description.html#A-Sample-Applicative-Description">A Sample Applicative Description</a></li>
+<li><a href="Combiners.html#index-applicative_003f-118"><code>applicative?</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Combiners.html#index-applicatives-115">applicatives</a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Combiners.html#index-apply-123"><code>apply</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Continuations.html#index-apply_002dcontinuation-134"><code>apply-continuation</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Numbers.html#index-asin-207"><code>asin</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Pairs-and-lists.html#index-assoc-84"><code>assoc</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-assq-91"><code>assq</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Numbers.html#index-atan-209"><code>atan</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Booleans.html#index-boolean_003f-13"><code>boolean?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
+<li><a href="Booleans.html#index-booleans-12">booleans</a>: <a href="Booleans.html#Booleans">Booleans</a></li>
+<li><a href="Pairs-and-lists.html#index-caaaar-59"><code>caaaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-caaadr-60"><code>caaadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-caaar-51"><code>caaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-caadar-61"><code>caadar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-caaddr-62"><code>caaddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-caadr-52"><code>caadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-caar-47"><code>caar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cadaar-63"><code>cadaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cadadr-64"><code>cadadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cadar-53"><code>cadar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-caddar-65"><code>caddar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cadddr-66"><code>cadddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-caddr-54"><code>caddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cadr-48"><code>cadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Ports.html#index-call_002dwith_002dinput_002dfile-271"><code>call-with-input-file</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Ports.html#index-call_002dwith_002doutput_002dfile-272"><code>call-with-output-file</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Continuations.html#index-call_002fcc-128"><code>call/cc</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Pairs-and-lists.html#index-car-45"><code>car</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cdaaar-67"><code>cdaaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cdaadr-68"><code>cdaadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cdaar-55"><code>cdaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cdadar-69"><code>cdadar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cdaddr-70"><code>cdaddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cdadr-56"><code>cdadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cdar-49"><code>cdar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cddaar-71"><code>cddaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cddadr-72"><code>cddadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cddar-57"><code>cddar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cdddar-73"><code>cdddar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cddddr-74"><code>cddddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cdddr-58"><code>cdddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cddr-50"><code>cddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-cdr-46"><code>cdr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Numbers.html#index-ceiling-197"><code>ceiling</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Characters.html#index-char_002d_003einteger-255"><code>char->integer</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dalphabetic_003f-248"><code>char-alphabetic?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dci_003c_003d_003f-245"><code>char-ci<=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dci_003c_003f-244"><code>char-ci<?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dci_003d_003f-243"><code>char-ci=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dci_003e_003d_003f-247"><code>char-ci>=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dci_003e_003f-246"><code>char-ci>?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002ddowncase-254"><code>char-downcase</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dlower_002dcase_003f-252"><code>char-lower-case?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dnumeric_003f-249"><code>char-numeric?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dupcase-253"><code>char-upcase</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dupper_002dcase_003f-251"><code>char-upper-case?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_002dwhitespace_003f-250"><code>char-whitespace?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_003c_003d_003f-240"><code>char<=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_003c_003f-239"><code>char<?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_003d_003f-238"><code>char=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_003e_003d_003f-242"><code>char>=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_003e_003f-241"><code>char>?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-char_003f-237"><code>char?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Characters.html#index-characters-236">characters</a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Combiners.html#index-combiner_003f-125"><code>combiner?</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Combiners.html#index-combiners-114">combiners</a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Pairs-and-lists.html#index-cons-39"><code>cons</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Continuations.html#index-continuation_002d_003eapplicative-131"><code>continuation->applicative</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Continuations.html#index-continuation_003f-127"><code>continuation?</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Continuations.html#index-continuations-126">continuations</a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Control.html#index-control-26">control</a>: <a href="Control.html#Control">Control</a></li>
+<li><a href="Pairs-and-lists.html#index-copy_002des-90"><code>copy-es</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-copy_002des_002dimmutable_0021-42"><code>copy-es-immutable!</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Numbers.html#index-cos-205"><code>cos</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Pairs-and-lists.html#index-countable_002dlist_003f-87"><code>countable-list?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Numbers.html#index-denominator-195"><code>denominator</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Format-of-Descriptions.html#index-description-format-7">description format</a>: <a href="Format-of-Descriptions.html#Format-of-Descriptions">Format of Descriptions</a></li>
+<li><a href="Numbers.html#index-div-169"><code>div</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-div_002dand_002dmod-171"><code>div-and-mod</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-div0-172"><code>div0</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-div0_002dand_002dmod0-174"><code>div0-and-mod0</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Evaluation-Notation.html#index-documentation-notation-4">documentation notation</a>: <a href="Evaluation-Notation.html#Evaluation-Notation">Evaluation Notation</a></li>
+<li><a href="Pairs-and-lists.html#index-empty-list-35">empty list</a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Encapsulations.html#index-encapsulations-138">encapsulations</a>: <a href="Encapsulations.html#Encapsulations">Encapsulations</a></li>
+<li><a href="Pairs-and-lists.html#index-encycle_0021-77"><code>encycle!</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Environments.html#index-environment_003f-95"><code>environment?</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Environments.html#index-environments-93">environments</a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Ports.html#index-eof_002dobject_003f-275"><code>eof-object?</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Equivalence.html#index-eq_003f-20"><code>eq?</code></a>: <a href="Equivalence.html#Equivalence">Equivalence</a></li>
+<li><a href="Equivalence.html#index-equal_003f-21"><code>equal?</code></a>: <a href="Equivalence.html#Equivalence">Equivalence</a></li>
+<li><a href="Equivalence.html#index-equivalence-19">equivalence</a>: <a href="Equivalence.html#Equivalence">Equivalence</a></li>
+<li><a href="Error-Messages.html#index-error-message-notation-6">error message notation</a>: <a href="Error-Messages.html#Error-Messages">Error Messages</a></li>
+<li><a href="Continuations.html#index-error_002dcontinuation-133"><code>error-continuation</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Environments.html#index-eval-97"><code>eval</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Evaluation-Notation.html#index-evaluation-notation-3">evaluation notation</a>: <a href="Evaluation-Notation.html#Evaluation-Notation">Evaluation Notation</a></li>
+<li><a href="Numbers.html#index-even_003f-178"><code>even?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-exact_003f-156"><code>exact?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Continuations.html#index-exit-137"><code>exit</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Numbers.html#index-exp-202"><code>exp</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-expt-211"><code>expt</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Continuations.html#index-extend_002dcontinuation-129"><code>extend-continuation</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Pairs-and-lists.html#index-filter-83"><code>filter</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-finite_002dlist_003f-86"><code>finite-list?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Numbers.html#index-finite_003f-155"><code>finite?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-floor-196"><code>floor</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Some-Terms.html#index-fonts-2">fonts</a>: <a href="Some-Terms.html#Some-Terms">Some Terms</a></li>
+<li><a href="A-Sample-Applicative-Description.html#index-foo-11"><code>foo</code></a>: <a href="A-Sample-Applicative-Description.html#A-Sample-Applicative-Description">A Sample Applicative Description</a></li>
+<li><a href="Control.html#index-for_002deach-32"><code>for-each</code></a>: <a href="Control.html#Control">Control</a></li>
+<li><a href="Promises.html#index-force-142"><code>force</code></a>: <a href="Promises.html#Promises">Promises</a></li>
+<li><a href="Numbers.html#index-gcd-183"><code>gcd</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Environments.html#index-get_002dcurrent_002denvironment-102"><code>get-current-environment</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Pairs-and-lists.html#index-get_002dlist_002dmetrics-75"><code>get-list-metrics</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Ports.html#index-get_002dmodule-274"><code>get-module</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Numbers.html#index-get_002dreal_002dexact_002dbounds-185"><code>get-real-exact-bounds</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-get_002dreal_002dexact_002dprimary-187"><code>get-real-exact-primary</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-get_002dreal_002dinternal_002dbounds-184"><code>get-real-internal-bounds</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-get_002dreal_002dinternal_002dprimary-186"><code>get-real-internal-primary</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-get_002dstring_002darithmetic-192"><code>get-string-arithmetic</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Continuations.html#index-guard_002dcontinuation-130"><code>guard-continuation</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Continuations.html#index-guard_002ddynamic_002dextent-136"><code>guard-dynamic-extent</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Environments.html#index-ignore-94">ignore</a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Environments.html#index-ignore_003f-96"><code>ignore?</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Control.html#index-inert-27">inert</a>: <a href="Control.html#Control">Control</a></li>
+<li><a href="Control.html#index-inert_003f-28"><code>inert?</code></a>: <a href="Control.html#Control">Control</a></li>
+<li><a href="Numbers.html#index-inexact_003f-157"><code>inexact?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Ports.html#index-input_002dport_003f-259"><code>input-port?</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Characters.html#index-integer_002d_003echar-256"><code>integer->char</code></a>: <a href="Characters.html#Characters">Characters</a></li>
+<li><a href="Numbers.html#index-integer_003f-152"><code>integer?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Kernel-History.html#index-Kernel-history-1">Kernel history</a>: <a href="Kernel-History.html#Kernel-History">Kernel History</a></li>
+<li><a href="Keyed-Variables.html#index-keyed-dynamic-variables-146">keyed dynamic variables</a>: <a href="Keyed-Variables.html#Keyed-Variables">Keyed Variables</a></li>
+<li><a href="Keyed-Variables.html#index-keyed-static-variables-148">keyed static variables</a>: <a href="Keyed-Variables.html#Keyed-Variables">Keyed Variables</a></li>
+<li><a href="Keyed-Variables.html#index-keyed-variables-145">keyed variables</a>: <a href="Keyed-Variables.html#Keyed-Variables">Keyed Variables</a></li>
+<li><a href="Numbers.html#index-lcm-182"><code>lcm</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Pairs-and-lists.html#index-length-79"><code>length</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-list-43"><code>list</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-list_002a-44"><code>list*</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Strings.html#index-list_002d_003estring-235"><code>list->string</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Pairs-and-lists.html#index-list_002dneighbors-82"><code>list-neighbors</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-list_002dref-80"><code>list-ref</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-list_002dtail-76"><code>list-tail</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-lists-36">lists</a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Ports.html#index-load-273"><code>load</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Numbers.html#index-log-203"><code>log</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Encapsulations.html#index-make_002dencapsulation_002dtype-139"><code>make-encapsulation-type</code></a>: <a href="Encapsulations.html#Encapsulations">Encapsulations</a></li>
+<li><a href="Environments.html#index-make_002denvironment-98"><code>make-environment</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Numbers.html#index-make_002dinexact-188"><code>make-inexact</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Environments.html#index-make_002dkernel_002dstandard_002denvironment-103"><code>make-kernel-standard-environment</code></a>: <a href="Environments.html#Environments">Environments</a></li>
+<li><a href="Keyed-Variables.html#index-make_002dkeyed_002ddynamic_002dvariable-147"><code>make-keyed-dynamic-variable</code></a>: <a href="Keyed-Variables.html#Keyed-Variables">Keyed Variables</a></li>
+<li><a href="Keyed-Variables.html#index-make_002dkeyed_002dstatic_002dvariable-149"><code>make-keyed-static-variable</code></a>: <a href="Keyed-Variables.html#Keyed-Variables">Keyed Variables</a></li>
+<li><a href="Strings.html#index-make_002dstring-224"><code>make-string</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Combiners.html#index-map-124"><code>map</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Pairs-and-lists.html#index-map-78"><code>map</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Numbers.html#index-max-180"><code>max</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Pairs-and-lists.html#index-member_003f-85"><code>member?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Promises.html#index-memoize-144"><code>memoize</code></a>: <a href="Promises.html#Promises">Promises</a></li>
+<li><a href="Pairs-and-lists.html#index-memq_003f-92"><code>memq?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Numbers.html#index-min-181"><code>min</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-mod-170"><code>mod</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-mod0-173"><code>mod0</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-negative_003f-176"><code>negative?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Pairs-and-lists.html#index-nil-34">nil</a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Booleans.html#index-not_003f-14"><code>not?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
+<li><a href="Pairs-and-lists.html#index-null_003f-38"><code>null?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Numbers.html#index-number_003f-151"><code>number?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-numbers-150">numbers</a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-numerator-194"><code>numerator</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="A-Sample-Applicative-Description.html#index-object-descriptions-10">object descriptions</a>: <a href="A-Sample-Applicative-Description.html#A-Sample-Applicative-Description">A Sample Applicative Description</a></li>
+<li><a href="Numbers.html#index-odd_003f-177"><code>odd?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Ports.html#index-open_002dinput_002dfile-265"><code>open-input-file</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Ports.html#index-open_002doutput_002dfile-266"><code>open-output-file</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="A-Sample-Applicative-Description.html#index-operative-descriptions-9">operative descriptions</a>: <a href="A-Sample-Applicative-Description.html#A-Sample-Applicative-Description">A Sample Applicative Description</a></li>
+<li><a href="Combiners.html#index-operative_003f-117"><code>operative?</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Combiners.html#index-operatives-116">operatives</a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Booleans.html#index-or_003f-16"><code>or?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
+<li><a href="Ports.html#index-output_002dport_003f-260"><code>output-port?</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Pairs-and-lists.html#index-pair_003f-37"><code>pair?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-pairs-33">pairs</a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Ports.html#index-port_003f-258"><code>port?</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Ports.html#index-ports-257">ports</a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Numbers.html#index-positive_003f-175"><code>positive?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Printing-Notation.html#index-printing-notation-5">printing notation</a>: <a href="Printing-Notation.html#Printing-Notation">Printing Notation</a></li>
+<li><a href="Promises.html#index-promise_003f-141"><code>promise?</code></a>: <a href="Promises.html#Promises">Promises</a></li>
+<li><a href="Promises.html#index-promises-140">promises</a>: <a href="Promises.html#Promises">Promises</a></li>
+<li><a href="Numbers.html#index-rational_003f-153"><code>rational?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-rationalize-200"><code>rationalize</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Ports.html#index-read-269"><code>read</code></a>: <a href="Ports.html#Ports">Ports</a></li>
+<li><a href="Numbers.html#index-real_002d_003eexact-190"><code>real->exact</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-real_002d_003einexact-189"><code>real->inexact</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-real_003f-154"><code>real?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Pairs-and-lists.html#index-reduce-88"><code>reduce</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Numbers.html#index-robust_003f-158"><code>robust?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Continuations.html#index-root_002dcontinuation-132"><code>root-continuation</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
+<li><a href="Numbers.html#index-round-199"><code>round</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Pairs-and-lists.html#index-set_002dcar_0021-40"><code>set-car!</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Pairs-and-lists.html#index-set_002dcdr_0021-41"><code>set-cdr!</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
+<li><a href="Numbers.html#index-simplest_002drational-201"><code>simplest-rational</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-sin-204"><code>sin</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-sqrt-210"><code>sqrt</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Strings.html#index-string-225"><code>string</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002d_003eimmutable_002dstring-233"><code>string->immutable-string</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002d_003elist-234"><code>string->list</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Symbols.html#index-string_002d_003esymbol-25"><code>string->symbol</code></a>: <a href="Symbols.html#Symbols">Symbols</a></li>
+<li><a href="Strings.html#index-string_002dappend-231"><code>string-append</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002dci_003c_003d_003f-221"><code>string-ci<=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002dci_003c_003f-220"><code>string-ci<?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002dci_003d_003f-219"><code>string-ci=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002dci_003e_003d_003f-223"><code>string-ci>=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002dci_003e_003f-222"><code>string-ci>?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002dcopy-232"><code>string-copy</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002dfill_0021-229"><code>string-fill!</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002dlength-226"><code>string-length</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002dref-227"><code>string-ref</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_002dset_0021-228"><code>string-set!</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_003c_003d_003f-216"><code>string<=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_003c_003f-215"><code>string<?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_003d_003f-214"><code>string=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_003e_003d_003f-218"><code>string>=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_003e_003f-217"><code>string>?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-string_003f-213"><code>string?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-strings-212">strings</a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Strings.html#index-substring-230"><code>substring</code></a>: <a href="Strings.html#Strings">Strings</a></li>
+<li><a href="Symbols.html#index-symbol_002d_003estring-24"><code>symbol->string</code></a>: <a href="Symbols.html#Symbols">Symbols</a></li>
+<li><a href="Symbols.html#index-symbol_003f-23"><code>symbol?</code></a>: <a href="Symbols.html#Symbols">Symbols</a></li>
+<li><a href="Symbols.html#index-symbols-22">symbols</a>: <a href="Symbols.html#Symbols">Symbols</a></li>
+<li><a href="Numbers.html#index-tan-206"><code>tan</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-truncate-198"><code>truncate</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Numbers.html#index-undefined_003f-159"><code>undefined?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Combiners.html#index-unwrap-121"><code>unwrap</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Numbers.html#index-with_002dstrict_002darithmetic-191"><code>with-strict-arithmetic</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+<li><a href="Combiners.html#index-wrap-120"><code>wrap</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
+<li><a href="Numbers.html#index-zero_003f-168"><code>zero?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
+</ul><!-- Print the tables of contents -->
+
+<div class="shortcontents">
+<h2>Short Contents</h2>
+<ul>
+<li><a href="Alphabetical-Index.html#toc_License">MIT/X11 License</a></li>
+<li><a href="Alphabetical-Index.html#toc_Introduction">1 Introduction</a></li>
+<li><a href="Alphabetical-Index.html#toc_Booleans">2 Booleans</a></li>
+<li><a href="Alphabetical-Index.html#toc_Equivalence">3 Equivalence</a></li>
+<li><a href="Alphabetical-Index.html#toc_Symbols">4 Symbols</a></li>
+<li><a href="Alphabetical-Index.html#toc_Control">5 Control</a></li>
+<li><a href="Alphabetical-Index.html#toc_Pairs-and-lists">6 Pairs and lists</a></li>
+<li><a href="Alphabetical-Index.html#toc_Environments">7 Environments</a></li>
+<li><a href="Alphabetical-Index.html#toc_Combiners">8 Combiners</a></li>
+<li><a href="Alphabetical-Index.html#toc_Continuations">9 Continuations</a></li>
+<li><a href="Alphabetical-Index.html#toc_Encapsulations">10 Encapsulations</a></li>
+<li><a href="Alphabetical-Index.html#toc_Promises">11 Promises</a></li>
+<li><a href="Alphabetical-Index.html#toc_Keyed-Variables">12 Keyed Variables</a></li>
+<li><a href="Alphabetical-Index.html#toc_Numbers">13 Numbers</a></li>
+<li><a href="Alphabetical-Index.html#toc_Strings">14 Strings</a></li>
+<li><a href="Alphabetical-Index.html#toc_Characters">15 Characters</a></li>
+<li><a href="Alphabetical-Index.html#toc_Ports">16 Ports</a></li>
+<li><a href="Alphabetical-Index.html#toc_Alphabetical-Index">Index</a></li>
+</ul>
+</div>
+
+ <div class="contents">
+<h2>Table of Contents</h2>
+<ul>
+<li><a name="toc_License" href="License.html#License">MIT/X11 License</a>
+<li><a name="toc_Introduction" href="Introduction.html#Introduction">1 Introduction</a>
+<ul>
+<li><a href="Caveats.html#Caveats">1.1 Caveats</a>
+<li><a href="Kernel-History.html#Kernel-History">1.2 Kernel History</a>
+<li><a href="Conventions.html#Conventions">1.3 Conventions</a>
+<ul>
+<li><a href="Some-Terms.html#Some-Terms">1.3.1 Some Terms</a>
+<li><a href="Evaluation-Notation.html#Evaluation-Notation">1.3.2 Evaluation Notation</a>
+<li><a href="Printing-Notation.html#Printing-Notation">1.3.3 Printing Notation</a>
+<li><a href="Error-Messages.html#Error-Messages">1.3.4 Error Messages</a>
+<li><a href="Format-of-Descriptions.html#Format-of-Descriptions">1.3.5 Format of Descriptions</a>
+<ul>
+<li><a href="A-Sample-Applicative-Description.html#A-Sample-Applicative-Description">1.3.5.1 A Sample Applicative Description</a>
+</li></ul>
+</li></ul>
+<li><a href="Acknowledgements.html#Acknowledgements">1.4 Acknowledgements</a>
+</li></ul>
+<li><a name="toc_Booleans" href="Booleans.html#Booleans">2 Booleans</a>
+<li><a name="toc_Equivalence" href="Equivalence.html#Equivalence">3 Equivalence</a>
+<li><a name="toc_Symbols" href="Symbols.html#Symbols">4 Symbols</a>
+<li><a name="toc_Control" href="Control.html#Control">5 Control</a>
+<li><a name="toc_Pairs-and-lists" href="Pairs-and-lists.html#Pairs-and-lists">6 Pairs and lists</a>
+<li><a name="toc_Environments" href="Environments.html#Environments">7 Environments</a>
+<li><a name="toc_Combiners" href="Combiners.html#Combiners">8 Combiners</a>
+<li><a name="toc_Continuations" href="Continuations.html#Continuations">9 Continuations</a>
+<li><a name="toc_Encapsulations" href="Encapsulations.html#Encapsulations">10 Encapsulations</a>
+<li><a name="toc_Promises" href="Promises.html#Promises">11 Promises</a>
+<li><a name="toc_Keyed-Variables" href="Keyed-Variables.html#Keyed-Variables">12 Keyed Variables</a>
+<ul>
+<li><a href="Keyed-Variables.html#Keyed-Variables">12.1 Keyed Dynamic Variables</a>
+<li><a href="Keyed-Variables.html#Keyed-Variables">12.2 Keyed Static Variables</a>
+</li></ul>
+<li><a name="toc_Numbers" href="Numbers.html#Numbers">13 Numbers</a>
+<li><a name="toc_Strings" href="Strings.html#Strings">14 Strings</a>
+<li><a name="toc_Characters" href="Characters.html#Characters">15 Characters</a>
+<li><a name="toc_Ports" href="Ports.html#Ports">16 Ports</a>
+<li><a name="toc_Alphabetical-Index" href="Alphabetical-Index.html#Alphabetical-Index">Index</a>
+</li></ul>
+</div>
+
+<!-- That's all -->
+</body></html>
+
diff --git a/manual/html/Index.html b/manual/html/Index.html
@@ -1,379 +0,0 @@
-<html lang="en">
-<head>
-<title>Index - klisp Reference Manual</title>
-<meta http-equiv="Content-Type" content="text/html">
-<meta name="description" content="klisp Reference Manual">
-<meta name="generator" content="makeinfo 4.13">
-<link title="Top" rel="start" href="index.html#Top">
-<link rel="prev" href="Ports.html#Ports" title="Ports">
-<link rel="next" href="../index.html#dir" title="(dir)">
-<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<style type="text/css"><!--
- pre.display { font-family:inherit }
- pre.format { font-family:inherit }
- pre.smalldisplay { font-family:inherit; font-size:smaller }
- pre.smallformat { font-family:inherit; font-size:smaller }
- pre.smallexample { font-size:smaller }
- pre.smalllisp { font-size:smaller }
- span.sc { font-variant:small-caps }
- span.roman { font-family:serif; font-weight:normal; }
- span.sansserif { font-family:sans-serif; font-weight:normal; }
---></style>
-</head>
-<body>
-<div class="node">
-<a name="Index"></a>
-<p>
-Next: <a rel="next" accesskey="n" href="../index.html#dir">(dir)</a>,
-Previous: <a rel="previous" accesskey="p" href="Ports.html#Ports">Ports</a>,
-Up: <a rel="up" accesskey="u" href="index.html#Top">Top</a>
-<hr>
-</div>
-
-<!-- this is from the elisp manual... Should read a little about this. -->
-<h2 class="unnumbered">Index</h2>
-
-<ul class="index-fn" compact>
-<li><a href="Booleans.html#index-g_t_0024and_003f-17"><code>$and?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
-<li><a href="Environments.html#index-g_t_0024binds_003f-101"><code>$binds?</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Control.html#index-g_t_0024cond-31"><code>$cond</code></a>: <a href="Control.html#Control">Control</a></li>
-<li><a href="Environments.html#index-g_t_0024define_0021-99"><code>$define!</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Control.html#index-g_t_0024if-29"><code>$if</code></a>: <a href="Control.html#Control">Control</a></li>
-<li><a href="Environments.html#index-g_t_0024import_0021-113"><code>$import!</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Combiners.html#index-g_t_0024lambda-122"><code>$lambda</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Promises.html#index-g_t_0024lazy-143"><code>$lazy</code></a>: <a href="Promises.html#Promises">Promises</a></li>
-<li><a href="Environments.html#index-g_t_0024let-100"><code>$let</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Environments.html#index-g_t_0024let_002a-104"><code>$let*</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Environments.html#index-g_t_0024let_002dredirect-107"><code>$let-redirect</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Environments.html#index-g_t_0024let_002dsafe-108"><code>$let-safe</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Environments.html#index-g_t_0024letrec-105"><code>$letrec</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Environments.html#index-g_t_0024letrec_002a-106"><code>$letrec*</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Booleans.html#index-g_t_0024or_003f-18"><code>$or?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
-<li><a href="Environments.html#index-g_t_0024provide_0021-112"><code>$provide!</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Environments.html#index-g_t_0024remote_002deval-109"><code>$remote-eval</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Control.html#index-g_t_0024sequence-30"><code>$sequence</code></a>: <a href="Control.html#Control">Control</a></li>
-<li><a href="Environments.html#index-g_t_0024set_0021-111"><code>$set!</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Combiners.html#index-g_t_0024vau-119"><code>$vau</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Ports.html#index-g_t_0028-261"><code>(</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Numbers.html#index-g_t_0028-179"><code>(</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Continuations.html#index-g_t_0028-135"><code>(</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Environments.html#index-g_t_0028-110"><code>(</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Numbers.html#index-g_t_002a-166"><code>*</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-g_t_002b-165"><code>+</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-g_t_002d-167"><code>-</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-g_t_002f-193"><code>/</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-g_t_003c_003d_003f-162"><code><=?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-g_t_003c_003f-161"><code><?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-g_t_003d_003f-160"><code>=?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-g_t_003e_003d_003f-164"><code>>=?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-g_t_003e_003f-163"><code>>?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-acos-208"><code>acos</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Booleans.html#index-and_003f-15"><code>and?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
-<li><a href="Pairs-and-lists.html#index-append-81"><code>append</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-append_0021-89"><code>append!</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="A-Sample-Applicative-Description.html#index-applicative-descriptions-8">applicative descriptions</a>: <a href="A-Sample-Applicative-Description.html#A-Sample-Applicative-Description">A Sample Applicative Description</a></li>
-<li><a href="Combiners.html#index-applicative_003f-118"><code>applicative?</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Combiners.html#index-applicatives-115">applicatives</a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Combiners.html#index-apply-123"><code>apply</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Continuations.html#index-apply_002dcontinuation-134"><code>apply-continuation</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Numbers.html#index-asin-207"><code>asin</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Pairs-and-lists.html#index-assoc-84"><code>assoc</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-assq-91"><code>assq</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Numbers.html#index-atan-209"><code>atan</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Booleans.html#index-boolean_003f-13"><code>boolean?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
-<li><a href="Booleans.html#index-booleans-12">booleans</a>: <a href="Booleans.html#Booleans">Booleans</a></li>
-<li><a href="Pairs-and-lists.html#index-caaaar-59"><code>caaaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-caaadr-60"><code>caaadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-caaar-51"><code>caaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-caadar-61"><code>caadar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-caaddr-62"><code>caaddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-caadr-52"><code>caadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-caar-47"><code>caar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cadaar-63"><code>cadaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cadadr-64"><code>cadadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cadar-53"><code>cadar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-caddar-65"><code>caddar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cadddr-66"><code>cadddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-caddr-54"><code>caddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cadr-48"><code>cadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Ports.html#index-call_002dwith_002dinput_002dfile-271"><code>call-with-input-file</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Ports.html#index-call_002dwith_002doutput_002dfile-272"><code>call-with-output-file</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Continuations.html#index-call_002fcc-128"><code>call/cc</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Pairs-and-lists.html#index-car-45"><code>car</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cdaaar-67"><code>cdaaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cdaadr-68"><code>cdaadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cdaar-55"><code>cdaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cdadar-69"><code>cdadar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cdaddr-70"><code>cdaddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cdadr-56"><code>cdadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cdar-49"><code>cdar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cddaar-71"><code>cddaar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cddadr-72"><code>cddadr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cddar-57"><code>cddar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cdddar-73"><code>cdddar</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cddddr-74"><code>cddddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cdddr-58"><code>cdddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cddr-50"><code>cddr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-cdr-46"><code>cdr</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Numbers.html#index-ceiling-197"><code>ceiling</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Characters.html#index-char_002d_003einteger-255"><code>char->integer</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dalphabetic_003f-248"><code>char-alphabetic?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dci_003c_003d_003f-245"><code>char-ci<=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dci_003c_003f-244"><code>char-ci<?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dci_003d_003f-243"><code>char-ci=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dci_003e_003d_003f-247"><code>char-ci>=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dci_003e_003f-246"><code>char-ci>?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002ddowncase-254"><code>char-downcase</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dlower_002dcase_003f-252"><code>char-lower-case?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dnumeric_003f-249"><code>char-numeric?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dupcase-253"><code>char-upcase</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dupper_002dcase_003f-251"><code>char-upper-case?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_002dwhitespace_003f-250"><code>char-whitespace?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_003c_003d_003f-240"><code>char<=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_003c_003f-239"><code>char<?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_003d_003f-238"><code>char=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_003e_003d_003f-242"><code>char>=?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_003e_003f-241"><code>char>?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-char_003f-237"><code>char?</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Characters.html#index-characters-236">characters</a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Combiners.html#index-combiner_003f-125"><code>combiner?</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Combiners.html#index-combiners-114">combiners</a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Pairs-and-lists.html#index-cons-39"><code>cons</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Continuations.html#index-continuation_002d_003eapplicative-131"><code>continuation->applicative</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Continuations.html#index-continuation_003f-127"><code>continuation?</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Continuations.html#index-continuations-126">continuations</a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Control.html#index-control-26">control</a>: <a href="Control.html#Control">Control</a></li>
-<li><a href="Pairs-and-lists.html#index-copy_002des-90"><code>copy-es</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-copy_002des_002dimmutable_0021-42"><code>copy-es-immutable!</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Numbers.html#index-cos-205"><code>cos</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Pairs-and-lists.html#index-countable_002dlist_003f-87"><code>countable-list?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Numbers.html#index-denominator-195"><code>denominator</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Format-of-Descriptions.html#index-description-format-7">description format</a>: <a href="Format-of-Descriptions.html#Format-of-Descriptions">Format of Descriptions</a></li>
-<li><a href="Numbers.html#index-div-169"><code>div</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-div_002dand_002dmod-171"><code>div-and-mod</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-div0-172"><code>div0</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-div0_002dand_002dmod0-174"><code>div0-and-mod0</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Evaluation-Notation.html#index-documentation-notation-4">documentation notation</a>: <a href="Evaluation-Notation.html#Evaluation-Notation">Evaluation Notation</a></li>
-<li><a href="Pairs-and-lists.html#index-empty-list-35">empty list</a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Encapsulations.html#index-encapsulations-138">encapsulations</a>: <a href="Encapsulations.html#Encapsulations">Encapsulations</a></li>
-<li><a href="Pairs-and-lists.html#index-encycle_0021-77"><code>encycle!</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Environments.html#index-environment_003f-95"><code>environment?</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Environments.html#index-environments-93">environments</a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Ports.html#index-eof_002dobject_003f-275"><code>eof-object?</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Equivalence.html#index-eq_003f-20"><code>eq?</code></a>: <a href="Equivalence.html#Equivalence">Equivalence</a></li>
-<li><a href="Equivalence.html#index-equal_003f-21"><code>equal?</code></a>: <a href="Equivalence.html#Equivalence">Equivalence</a></li>
-<li><a href="Equivalence.html#index-equivalence-19">equivalence</a>: <a href="Equivalence.html#Equivalence">Equivalence</a></li>
-<li><a href="Error-Messages.html#index-error-message-notation-6">error message notation</a>: <a href="Error-Messages.html#Error-Messages">Error Messages</a></li>
-<li><a href="Continuations.html#index-error_002dcontinuation-133"><code>error-continuation</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Environments.html#index-eval-97"><code>eval</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Evaluation-Notation.html#index-evaluation-notation-3">evaluation notation</a>: <a href="Evaluation-Notation.html#Evaluation-Notation">Evaluation Notation</a></li>
-<li><a href="Numbers.html#index-even_003f-178"><code>even?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-exact_003f-156"><code>exact?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Continuations.html#index-exit-137"><code>exit</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Numbers.html#index-exp-202"><code>exp</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-expt-211"><code>expt</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Continuations.html#index-extend_002dcontinuation-129"><code>extend-continuation</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Pairs-and-lists.html#index-filter-83"><code>filter</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-finite_002dlist_003f-86"><code>finite-list?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Numbers.html#index-finite_003f-155"><code>finite?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-floor-196"><code>floor</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Some-Terms.html#index-fonts-2">fonts</a>: <a href="Some-Terms.html#Some-Terms">Some Terms</a></li>
-<li><a href="A-Sample-Applicative-Description.html#index-foo-11"><code>foo</code></a>: <a href="A-Sample-Applicative-Description.html#A-Sample-Applicative-Description">A Sample Applicative Description</a></li>
-<li><a href="Control.html#index-for_002deach-32"><code>for-each</code></a>: <a href="Control.html#Control">Control</a></li>
-<li><a href="Promises.html#index-force-142"><code>force</code></a>: <a href="Promises.html#Promises">Promises</a></li>
-<li><a href="Numbers.html#index-gcd-183"><code>gcd</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Environments.html#index-get_002dcurrent_002denvironment-102"><code>get-current-environment</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Pairs-and-lists.html#index-get_002dlist_002dmetrics-75"><code>get-list-metrics</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Ports.html#index-get_002dmodule-274"><code>get-module</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Numbers.html#index-get_002dreal_002dexact_002dbounds-185"><code>get-real-exact-bounds</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-get_002dreal_002dexact_002dprimary-187"><code>get-real-exact-primary</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-get_002dreal_002dinternal_002dbounds-184"><code>get-real-internal-bounds</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-get_002dreal_002dinternal_002dprimary-186"><code>get-real-internal-primary</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-get_002dstring_002darithmetic-192"><code>get-string-arithmetic</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Continuations.html#index-guard_002dcontinuation-130"><code>guard-continuation</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Continuations.html#index-guard_002ddynamic_002dextent-136"><code>guard-dynamic-extent</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Environments.html#index-ignore-94">ignore</a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Environments.html#index-ignore_003f-96"><code>ignore?</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Control.html#index-inert-27">inert</a>: <a href="Control.html#Control">Control</a></li>
-<li><a href="Control.html#index-inert_003f-28"><code>inert?</code></a>: <a href="Control.html#Control">Control</a></li>
-<li><a href="Numbers.html#index-inexact_003f-157"><code>inexact?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Ports.html#index-input_002dport_003f-259"><code>input-port?</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Characters.html#index-integer_002d_003echar-256"><code>integer->char</code></a>: <a href="Characters.html#Characters">Characters</a></li>
-<li><a href="Numbers.html#index-integer_003f-152"><code>integer?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Kernel-History.html#index-Kernel-history-1">Kernel history</a>: <a href="Kernel-History.html#Kernel-History">Kernel History</a></li>
-<li><a href="Keyed-Variables.html#index-keyed-dynamic-variables-146">keyed dynamic variables</a>: <a href="Keyed-Variables.html#Keyed-Variables">Keyed Variables</a></li>
-<li><a href="Keyed-Variables.html#index-keyed-static-variables-148">keyed static variables</a>: <a href="Keyed-Variables.html#Keyed-Variables">Keyed Variables</a></li>
-<li><a href="Keyed-Variables.html#index-keyed-variables-145">keyed variables</a>: <a href="Keyed-Variables.html#Keyed-Variables">Keyed Variables</a></li>
-<li><a href="Numbers.html#index-lcm-182"><code>lcm</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Pairs-and-lists.html#index-length-79"><code>length</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-list-43"><code>list</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-list_002a-44"><code>list*</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Strings.html#index-list_002d_003estring-235"><code>list->string</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Pairs-and-lists.html#index-list_002dneighbors-82"><code>list-neighbors</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-list_002dref-80"><code>list-ref</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-list_002dtail-76"><code>list-tail</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-lists-36">lists</a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Ports.html#index-load-273"><code>load</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Numbers.html#index-log-203"><code>log</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Encapsulations.html#index-make_002dencapsulation_002dtype-139"><code>make-encapsulation-type</code></a>: <a href="Encapsulations.html#Encapsulations">Encapsulations</a></li>
-<li><a href="Environments.html#index-make_002denvironment-98"><code>make-environment</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Numbers.html#index-make_002dinexact-188"><code>make-inexact</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Environments.html#index-make_002dkernel_002dstandard_002denvironment-103"><code>make-kernel-standard-environment</code></a>: <a href="Environments.html#Environments">Environments</a></li>
-<li><a href="Keyed-Variables.html#index-make_002dkeyed_002ddynamic_002dvariable-147"><code>make-keyed-dynamic-variable</code></a>: <a href="Keyed-Variables.html#Keyed-Variables">Keyed Variables</a></li>
-<li><a href="Keyed-Variables.html#index-make_002dkeyed_002dstatic_002dvariable-149"><code>make-keyed-static-variable</code></a>: <a href="Keyed-Variables.html#Keyed-Variables">Keyed Variables</a></li>
-<li><a href="Strings.html#index-make_002dstring-224"><code>make-string</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Combiners.html#index-map-124"><code>map</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Pairs-and-lists.html#index-map-78"><code>map</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Numbers.html#index-max-180"><code>max</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Pairs-and-lists.html#index-member_003f-85"><code>member?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Promises.html#index-memoize-144"><code>memoize</code></a>: <a href="Promises.html#Promises">Promises</a></li>
-<li><a href="Pairs-and-lists.html#index-memq_003f-92"><code>memq?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Numbers.html#index-min-181"><code>min</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-mod-170"><code>mod</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-mod0-173"><code>mod0</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-negative_003f-176"><code>negative?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Pairs-and-lists.html#index-nil-34">nil</a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Booleans.html#index-not_003f-14"><code>not?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
-<li><a href="Pairs-and-lists.html#index-null_003f-38"><code>null?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Numbers.html#index-number_003f-151"><code>number?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-numbers-150">numbers</a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-numerator-194"><code>numerator</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="A-Sample-Applicative-Description.html#index-object-descriptions-10">object descriptions</a>: <a href="A-Sample-Applicative-Description.html#A-Sample-Applicative-Description">A Sample Applicative Description</a></li>
-<li><a href="Numbers.html#index-odd_003f-177"><code>odd?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Ports.html#index-open_002dinput_002dfile-265"><code>open-input-file</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Ports.html#index-open_002doutput_002dfile-266"><code>open-output-file</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="A-Sample-Applicative-Description.html#index-operative-descriptions-9">operative descriptions</a>: <a href="A-Sample-Applicative-Description.html#A-Sample-Applicative-Description">A Sample Applicative Description</a></li>
-<li><a href="Combiners.html#index-operative_003f-117"><code>operative?</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Combiners.html#index-operatives-116">operatives</a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Booleans.html#index-or_003f-16"><code>or?</code></a>: <a href="Booleans.html#Booleans">Booleans</a></li>
-<li><a href="Ports.html#index-output_002dport_003f-260"><code>output-port?</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Pairs-and-lists.html#index-pair_003f-37"><code>pair?</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-pairs-33">pairs</a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Ports.html#index-port_003f-258"><code>port?</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Ports.html#index-ports-257">ports</a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Numbers.html#index-positive_003f-175"><code>positive?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Printing-Notation.html#index-printing-notation-5">printing notation</a>: <a href="Printing-Notation.html#Printing-Notation">Printing Notation</a></li>
-<li><a href="Promises.html#index-promise_003f-141"><code>promise?</code></a>: <a href="Promises.html#Promises">Promises</a></li>
-<li><a href="Promises.html#index-promises-140">promises</a>: <a href="Promises.html#Promises">Promises</a></li>
-<li><a href="Numbers.html#index-rational_003f-153"><code>rational?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-rationalize-200"><code>rationalize</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Ports.html#index-read-269"><code>read</code></a>: <a href="Ports.html#Ports">Ports</a></li>
-<li><a href="Numbers.html#index-real_002d_003eexact-190"><code>real->exact</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-real_002d_003einexact-189"><code>real->inexact</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-real_003f-154"><code>real?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Pairs-and-lists.html#index-reduce-88"><code>reduce</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Numbers.html#index-robust_003f-158"><code>robust?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Continuations.html#index-root_002dcontinuation-132"><code>root-continuation</code></a>: <a href="Continuations.html#Continuations">Continuations</a></li>
-<li><a href="Numbers.html#index-round-199"><code>round</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Pairs-and-lists.html#index-set_002dcar_0021-40"><code>set-car!</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Pairs-and-lists.html#index-set_002dcdr_0021-41"><code>set-cdr!</code></a>: <a href="Pairs-and-lists.html#Pairs-and-lists">Pairs and lists</a></li>
-<li><a href="Numbers.html#index-simplest_002drational-201"><code>simplest-rational</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-sin-204"><code>sin</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-sqrt-210"><code>sqrt</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Strings.html#index-string-225"><code>string</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002d_003eimmutable_002dstring-233"><code>string->immutable-string</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002d_003elist-234"><code>string->list</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Symbols.html#index-string_002d_003esymbol-25"><code>string->symbol</code></a>: <a href="Symbols.html#Symbols">Symbols</a></li>
-<li><a href="Strings.html#index-string_002dappend-231"><code>string-append</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002dci_003c_003d_003f-221"><code>string-ci<=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002dci_003c_003f-220"><code>string-ci<?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002dci_003d_003f-219"><code>string-ci=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002dci_003e_003d_003f-223"><code>string-ci>=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002dci_003e_003f-222"><code>string-ci>?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002dcopy-232"><code>string-copy</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002dfill_0021-229"><code>string-fill!</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002dlength-226"><code>string-length</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002dref-227"><code>string-ref</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_002dset_0021-228"><code>string-set!</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_003c_003d_003f-216"><code>string<=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_003c_003f-215"><code>string<?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_003d_003f-214"><code>string=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_003e_003d_003f-218"><code>string>=?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_003e_003f-217"><code>string>?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-string_003f-213"><code>string?</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-strings-212">strings</a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Strings.html#index-substring-230"><code>substring</code></a>: <a href="Strings.html#Strings">Strings</a></li>
-<li><a href="Symbols.html#index-symbol_002d_003estring-24"><code>symbol->string</code></a>: <a href="Symbols.html#Symbols">Symbols</a></li>
-<li><a href="Symbols.html#index-symbol_003f-23"><code>symbol?</code></a>: <a href="Symbols.html#Symbols">Symbols</a></li>
-<li><a href="Symbols.html#index-symbols-22">symbols</a>: <a href="Symbols.html#Symbols">Symbols</a></li>
-<li><a href="Numbers.html#index-tan-206"><code>tan</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-truncate-198"><code>truncate</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Numbers.html#index-undefined_003f-159"><code>undefined?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Combiners.html#index-unwrap-121"><code>unwrap</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Numbers.html#index-with_002dstrict_002darithmetic-191"><code>with-strict-arithmetic</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-<li><a href="Combiners.html#index-wrap-120"><code>wrap</code></a>: <a href="Combiners.html#Combiners">Combiners</a></li>
-<li><a href="Numbers.html#index-zero_003f-168"><code>zero?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li>
-</ul><!-- Print the tables of contents -->
-
-<div class="shortcontents">
-<h2>Short Contents</h2>
-<ul>
-<li><a href="Index.html#toc_License">MIT/X11 License</a></li>
-<li><a href="Index.html#toc_Introduction">1 Introduction</a></li>
-<li><a href="Index.html#toc_Booleans">2 Booleans</a></li>
-<li><a href="Index.html#toc_Equivalence">3 Equivalence</a></li>
-<li><a href="Index.html#toc_Symbols">4 Symbols</a></li>
-<li><a href="Index.html#toc_Control">5 Control</a></li>
-<li><a href="Index.html#toc_Pairs-and-lists">6 Pairs and lists</a></li>
-<li><a href="Index.html#toc_Environments">7 Environments</a></li>
-<li><a href="Index.html#toc_Combiners">8 Combiners</a></li>
-<li><a href="Index.html#toc_Continuations">9 Continuations</a></li>
-<li><a href="Index.html#toc_Encapsulations">10 Encapsulations</a></li>
-<li><a href="Index.html#toc_Promises">11 Promises</a></li>
-<li><a href="Index.html#toc_Keyed-Variables">12 Keyed Variables</a></li>
-<li><a href="Index.html#toc_Numbers">13 Numbers</a></li>
-<li><a href="Index.html#toc_Strings">14 Strings</a></li>
-<li><a href="Index.html#toc_Characters">15 Characters</a></li>
-<li><a href="Index.html#toc_Ports">16 Ports</a></li>
-<li><a href="Index.html#toc_Index">Index</a></li>
-</ul>
-</div>
-
- <div class="contents">
-<h2>Table of Contents</h2>
-<ul>
-<li><a name="toc_License" href="License.html#License">MIT/X11 License</a>
-<li><a name="toc_Introduction" href="Introduction.html#Introduction">1 Introduction</a>
-<ul>
-<li><a href="Caveats.html#Caveats">1.1 Caveats</a>
-<li><a href="Kernel-History.html#Kernel-History">1.2 Kernel History</a>
-<li><a href="Conventions.html#Conventions">1.3 Conventions</a>
-<ul>
-<li><a href="Some-Terms.html#Some-Terms">1.3.1 Some Terms</a>
-<li><a href="Evaluation-Notation.html#Evaluation-Notation">1.3.2 Evaluation Notation</a>
-<li><a href="Printing-Notation.html#Printing-Notation">1.3.3 Printing Notation</a>
-<li><a href="Error-Messages.html#Error-Messages">1.3.4 Error Messages</a>
-<li><a href="Format-of-Descriptions.html#Format-of-Descriptions">1.3.5 Format of Descriptions</a>
-<ul>
-<li><a href="A-Sample-Applicative-Description.html#A-Sample-Applicative-Description">1.3.5.1 A Sample Applicative Description</a>
-</li></ul>
-</li></ul>
-<li><a href="Acknowledgements.html#Acknowledgements">1.4 Acknowledgements</a>
-</li></ul>
-<li><a name="toc_Booleans" href="Booleans.html#Booleans">2 Booleans</a>
-<li><a name="toc_Equivalence" href="Equivalence.html#Equivalence">3 Equivalence</a>
-<li><a name="toc_Symbols" href="Symbols.html#Symbols">4 Symbols</a>
-<li><a name="toc_Control" href="Control.html#Control">5 Control</a>
-<li><a name="toc_Pairs-and-lists" href="Pairs-and-lists.html#Pairs-and-lists">6 Pairs and lists</a>
-<li><a name="toc_Environments" href="Environments.html#Environments">7 Environments</a>
-<li><a name="toc_Combiners" href="Combiners.html#Combiners">8 Combiners</a>
-<li><a name="toc_Continuations" href="Continuations.html#Continuations">9 Continuations</a>
-<li><a name="toc_Encapsulations" href="Encapsulations.html#Encapsulations">10 Encapsulations</a>
-<li><a name="toc_Promises" href="Promises.html#Promises">11 Promises</a>
-<li><a name="toc_Keyed-Variables" href="Keyed-Variables.html#Keyed-Variables">12 Keyed Variables</a>
-<ul>
-<li><a href="Keyed-Variables.html#Keyed-Variables">12.1 Keyed Dynamic Variables</a>
-<li><a href="Keyed-Variables.html#Keyed-Variables">12.2 Keyed Static Variables</a>
-</li></ul>
-<li><a name="toc_Numbers" href="Numbers.html#Numbers">13 Numbers</a>
-<li><a name="toc_Strings" href="Strings.html#Strings">14 Strings</a>
-<li><a name="toc_Characters" href="Characters.html#Characters">15 Characters</a>
-<li><a name="toc_Ports" href="Ports.html#Ports">16 Ports</a>
-<li><a name="toc_Index" href="Index.html#Index">Index</a>
-</li></ul>
-</div>
-
-<!-- That's all -->
-</body></html>
-
diff --git a/manual/html/Ports.html b/manual/html/Ports.html
@@ -6,7 +6,7 @@
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="prev" href="Characters.html#Characters" title="Characters">
-<link rel="next" href="Index.html#Index" title="Index">
+<link rel="next" href="Alphabetical-Index.html#Alphabetical-Index" title="Alphabetical Index">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
@@ -25,7 +25,7 @@
<div class="node">
<a name="Ports"></a>
<p>
-Next: <a rel="next" accesskey="n" href="Index.html#Index">Index</a>,
+Next: <a rel="next" accesskey="n" href="Alphabetical-Index.html#Alphabetical-Index">Alphabetical Index</a>,
Previous: <a rel="previous" accesskey="p" href="Characters.html#Characters">Characters</a>,
Up: <a rel="up" accesskey="u" href="index.html#Top">Top</a>
<hr>
diff --git a/manual/html/index.html b/manual/html/index.html
@@ -53,7 +53,7 @@ Up: <a rel="up" accesskey="u" href="../index.html#dir">(dir)</a>
<li><a href="Characters.html#Characters">Characters</a>: Characters module features.
<li><a href="Ports.html#Ports">Ports</a>: Ports module features.
<!-- TODO add error objs to both klisp and the manual -->
-<li><a href="Index.html#Index">Index</a>: Index including concepts, functions, variables,
+<li><a href="Alphabetical-Index.html#Alphabetical-Index">Alphabetical Index</a>: Index including concepts, functions, variables,
and other terms.
<!-- Appendices -->
diff --git a/manual/klisp.info b/manual/klisp.info
@@ -55,7 +55,7 @@ the header "Permission to copy this report", that reads:
* Strings:: Strings module features.
* Characters:: Characters module features.
* Ports:: Ports module features.
-* Index:: Index including concepts, functions, variables,
+* Alphabetical Index:: Index including concepts, functions, variables,
and other terms.
@@ -2129,7 +2129,7 @@ features defined here were taken mostly from r5rs scheme.
is signaled.
-File: klisp.info, Node: Ports, Next: Index, Prev: Characters, Up: Top
+File: klisp.info, Node: Ports, Next: Alphabetical Index, Prev: Characters, Up: Top
16 Ports
********
@@ -2374,7 +2374,7 @@ klisp and was taken from Scheme.
SOURCE NOTE: this is missing from Kernel, it is taken from Scheme.
-File: klisp.info, Node: Index, Next: (dir), Prev: Ports, Up: Top
+File: klisp.info, Node: Alphabetical Index, Next: (dir), Prev: Ports, Up: Top
Index
*****
@@ -2688,6 +2688,6 @@ Node: Numbers72131
Node: Strings91630
Node: Characters96977
Node: Ports99687
-Node: Index110972
+Node: Alphabetical Index110985
End Tag Table
diff --git a/manual/src/index.texi b/manual/src/index.texi
@@ -2,7 +2,7 @@
@setfilename ../src/index
@c TODO correct prev node
-@node Index, (dir), Ports, Top
+@node Alphabetical Index, (dir), Ports, Top
@c this is from the elisp manual... Should read a little about this.
@unnumbered Index
diff --git a/manual/src/klisp.texi b/manual/src/klisp.texi
@@ -110,7 +110,7 @@ permission is granted to copy it in whole or in part without fee.
* Characters:: Characters module features.
* Ports:: Ports module features.
@c TODO add error objs to both klisp and the manual
-* Index:: Index including concepts, functions, variables,
+* Alphabetical Index:: Index including concepts, functions, variables,
and other terms.
@c Appendices
diff --git a/manual/src/ports.texi b/manual/src/ports.texi
@@ -1,7 +1,7 @@
@c -*-texinfo-*-
@setfilename ../src/ports
-@node Ports, Index, Characters, Top
+@node Ports, Alphabetical Index, Characters, Top
@comment node-name, next, previous, up
@chapter Ports
diff --git a/src/Makefile b/src/Makefile
@@ -29,12 +29,12 @@ CORE_O= kobject.o ktoken.o kpair.o kstring.o ksymbol.o kread.o \
kwrite.o kstate.o kmem.o kerror.o kauxlib.o kenvironment.o \
kcontinuation.o koperative.o kapplicative.o keval.o krepl.o \
kencapsulation.o kpromise.o kport.o kinteger.o krational.o \
- kreal.o ktable.o kgc.o imath.o imrat.o \
+ kreal.o ktable.o kgc.o imath.o imrat.o kblob.o \
kground.o kghelpers.o kgbooleans.o kgeqp.o kgequalp.o \
kgsymbols.o kgcontrol.o kgpairs_lists.o kgpair_mut.o kgenvironments.o \
kgenv_mut.o kgcombiners.o kgcontinuations.o kgencapsulations.o \
kgpromises.o kgkd_vars.o kgks_vars.o kgports.o kgchars.o kgnumbers.o \
- kgstrings.o
+ kgstrings.o kgblobs.o kgsystem.o
# TEMP: in klisp there is no distinction between core & lib
LIB_O=
@@ -101,6 +101,8 @@ kapplicative.o: kapplicative.c kobject.h klimits.h klisp.h klispconf.h \
kstate.h ktoken.h kmem.h kapplicative.h koperative.h kgc.h
kauxlib.o: kauxlib.c klisp.h kobject.h klimits.h klispconf.h kstate.h \
ktoken.h kmem.h
+kblob.o: kblob.c kblob.h kobject.h klimits.h klisp.h klispconf.h kstate.h \
+ ktoken.h kmem.h kgc.h
kcontinuation.o: kcontinuation.c kcontinuation.h kobject.h klimits.h \
klisp.h klispconf.h kstate.h ktoken.h kmem.h kgc.h
kencapsulation.o: kencapsulation.c kobject.h klimits.h klisp.h \
@@ -112,12 +114,17 @@ kerror.o: kerror.c klisp.h kobject.h klimits.h klispconf.h kpair.h \
kstate.h ktoken.h kmem.h kgc.h kstring.h
keval.o: keval.c klisp.h kobject.h klimits.h klispconf.h kstate.h \
ktoken.h kmem.h kpair.h kgc.h kenvironment.h kcontinuation.h kerror.h
+kgblobs.o: kgblobs.c kstate.h klimits.h klisp.h kobject.h klispconf.h \
+ ktoken.h kmem.h kapplicative.h koperative.h kcontinuation.h kerror.h \
+ kblob.h kghelpers.h kpair.h kgc.h kenvironment.h ksymbol.h kstring.h \
+ kgblobs.h kgnumbers.h
kgbooleans.o: kgbooleans.c kobject.h klimits.h klisp.h klispconf.h \
kstate.h ktoken.h kmem.h kpair.h kgc.h ksymbol.h kstring.h \
kcontinuation.h kerror.h kghelpers.h kapplicative.h koperative.h \
kenvironment.h
kgc.o: kgc.c kgc.h kobject.h klimits.h klisp.h klispconf.h kstate.h \
- ktoken.h kmem.h kport.h imath.h imrat.h ktable.h kstring.h kerror.h
+ ktoken.h kmem.h kport.h imath.h imrat.h ktable.h kstring.h kblob.h \
+ kerror.h
kgchars.o: kgchars.c kstate.h klimits.h klisp.h kobject.h klispconf.h \
ktoken.h kmem.h kapplicative.h koperative.h kcontinuation.h kerror.h \
kghelpers.h kpair.h kgc.h kenvironment.h ksymbol.h kstring.h kgchars.h
@@ -150,7 +157,7 @@ kgeqp.o: kgeqp.c kstate.h klimits.h klisp.h kobject.h klispconf.h \
kapplicative.h koperative.h kenvironment.h ksymbol.h kstring.h kgeqp.h \
kinteger.h imath.h krational.h imrat.h
kgequalp.o: kgequalp.c kstate.h klimits.h klisp.h kobject.h klispconf.h \
- ktoken.h kmem.h kpair.h kgc.h kstring.h kcontinuation.h kerror.h \
+ ktoken.h kmem.h kpair.h kgc.h kstring.h kblob.h kcontinuation.h kerror.h \
kghelpers.h kapplicative.h koperative.h kenvironment.h ksymbol.h kgeqp.h \
kinteger.h imath.h krational.h imrat.h kgequalp.h
kghelpers.o: kghelpers.c kghelpers.h kstate.h klimits.h klisp.h kobject.h \
@@ -192,7 +199,7 @@ kground.o: kground.c kstate.h klimits.h klisp.h kobject.h klispconf.h \
kgequalp.h kgsymbols.h kgcontrol.h kgpairs_lists.h kgpair_mut.h \
kgenvironments.h kgenv_mut.h kgcombiners.h kgcontinuations.h \
kgencapsulations.h kgpromises.h kgkd_vars.h kgks_vars.h kgnumbers.h \
- kgstrings.h kgchars.h kgports.h ktable.h keval.h krepl.h
+ kgstrings.h kgchars.h kgports.h kgblobs.h ktable.h keval.h krepl.h kgsystem.h
kgstrings.o: kgstrings.c kstate.h klimits.h klisp.h kobject.h klispconf.h \
ktoken.h kmem.h kapplicative.h koperative.h kcontinuation.h kerror.h \
ksymbol.h kstring.h kghelpers.h kpair.h kgc.h kenvironment.h kgchars.h \
@@ -201,6 +208,10 @@ kgsymbols.o: kgsymbols.c kstate.h klimits.h klisp.h kobject.h klispconf.h \
ktoken.h kmem.h kcontinuation.h kpair.h kgc.h kstring.h ksymbol.h \
kerror.h kghelpers.h kapplicative.h koperative.h kenvironment.h \
kgsymbols.h
+kgsystem.o: kgsystem.c kstate.h klimits.h klisp.h kobject.h klispconf.h \
+ ktoken.h kmem.h kpair.h kgc.h kerror.h kghelpers.h kapplicative.h \
+ koperative.h kcontinuation.h kenvironment.h ksymbol.h kstring.h \
+ kgsystem.h
kinteger.o: kinteger.c kinteger.h kobject.h klimits.h klisp.h klispconf.h \
kstate.h ktoken.h kmem.h imath.h kgc.h
klisp.o: klisp.c klimits.h klisp.h kobject.h klispconf.h kstate.h \
@@ -229,7 +240,7 @@ krepl.o: krepl.c klisp.h kobject.h klimits.h klispconf.h kstate.h \
kstate.o: kstate.c klisp.h kobject.h klimits.h klispconf.h kstate.h \
ktoken.h kmem.h kstring.h kpair.h kgc.h keval.h koperative.h \
kapplicative.h kcontinuation.h kenvironment.h kground.h krepl.h \
- ksymbol.h kport.h ktable.h kgpairs_lists.h kghelpers.h kerror.h
+ ksymbol.h kport.h ktable.h kblob.h kgpairs_lists.h kghelpers.h kerror.h
kstring.o: kstring.c kstring.h kobject.h klimits.h klisp.h klispconf.h \
kstate.h ktoken.h kmem.h kgc.h
ksymbol.o: ksymbol.c ksymbol.h kobject.h klimits.h klisp.h klispconf.h \
@@ -244,7 +255,7 @@ ktoken.o: ktoken.c ktoken.h kobject.h klimits.h klisp.h klispconf.h \
kwrite.o: kwrite.c kwrite.h kobject.h klimits.h klisp.h klispconf.h \
kstate.h ktoken.h kmem.h kinteger.h imath.h krational.h imrat.h kreal.h \
kpair.h kgc.h kstring.h ksymbol.h kerror.h ktable.h kport.h \
- kenvironment.h
+ kenvironment.h kblob.h
imath.o: imath.c imath.h kobject.h klimits.h klisp.h klispconf.h kstate.h \
ktoken.h kmem.h kerror.h
imrat.o: imrat.c imrat.h imath.h kobject.h klimits.h klisp.h klispconf.h \
diff --git a/src/kblob.c b/src/kblob.c
@@ -0,0 +1,66 @@
+/*
+** kblob.c
+** Kernel Blobs (byte vectors)
+** See Copyright Notice in klisp.h
+*/
+
+#include <string.h>
+
+#include "kblob.h"
+#include "kobject.h"
+#include "kstate.h"
+#include "kmem.h"
+#include "kgc.h"
+
+/* Constructors */
+TValue kblob_new_g(klisp_State *K, bool m, uint32_t size)
+{
+ Blob *new_blob;
+
+ /* XXX: find a better way to do this! */
+ if (size == 0 && ttisblob(K->empty_blob)) {
+ return K->empty_blob;
+ }
+
+ new_blob = klispM_malloc(K, sizeof(Blob) + size);
+
+ /* header + gc_fields */
+ klispC_link(K, (GCObject *) new_blob, K_TBLOB, m? 0 : K_FLAG_IMMUTABLE);
+
+ /* blob specific fields */
+ new_blob->mark = KFALSE;
+ new_blob->size = size;
+
+ /* clear the buffer */
+ memset(new_blob->b, 0, size);
+
+ return gc2blob(new_blob);
+}
+
+TValue kblob_new(klisp_State *K, uint32_t size)
+{
+ return kblob_new_g(K, true, size);
+}
+
+TValue kblob_new_imm(klisp_State *K, uint32_t size)
+{
+ return kblob_new_g(K, false, size);
+}
+
+/* both obj1 and obj2 should be blobs */
+bool kblob_equalp(TValue obj1, TValue obj2)
+{
+ klisp_assert(ttisblob(obj1) && ttisblob(obj2));
+
+ Blob *blob1 = tv2blob(obj1);
+ Blob *blob2 = tv2blob(obj2);
+
+ if (blob1->size == blob2->size) {
+ return (blob1->size == 0) ||
+ (memcmp(blob1->b, blob2->b, blob1->size) == 0);
+ } else {
+ return false;
+ }
+}
+
+bool kblobp(TValue obj) { return ttisblob(obj); }
diff --git a/src/kblob.h b/src/kblob.h
@@ -0,0 +1,34 @@
+/*
+** kblob.h
+** Kernel Blobs (byte vectors)
+** See Copyright Notice in klisp.h
+*/
+
+#ifndef kblob_h
+#define kblob_h
+
+#include "kobject.h"
+#include "kstate.h"
+
+/* TODO change blob constructors to string like constructors */
+/* TODO change names to lua-like (e.g. klispB_new, etc) */
+
+/* Constructors for blobs */
+TValue kblob_new_g(klisp_State *K, bool m, uint32_t size);
+TValue kblob_new_imm(klisp_State *K, uint32_t size);
+TValue kblob_new(klisp_State *K, uint32_t size);
+
+/* both obj1 and obj2 should be blobs, this compares byte by byte
+ and doesn't differentiate immutable from mutable blobs */
+bool kblob_equalp(TValue obj1, TValue obj2);
+bool kblob(TValue obj);
+
+/* some macros to access the parts of the blobs */
+#define kblob_buf(tv_) (tv2blob(tv_)->b)
+#define kblob_size(tv_) (tv2blob(tv_)->size)
+
+#define kblob_emptyp(tv_) (kblob_size(tv_) == 0)
+#define kblob_mutablep(tv_) (kis_mutable(tv_))
+#define kblob_immutablep(tv_) (kis_immutable(tv_))
+
+#endif
diff --git a/src/kgblobs.c b/src/kgblobs.c
@@ -0,0 +1,250 @@
+/*
+** kgblobs.c
+** Blobs features for the ground environment
+** See Copyright Notice in klisp.h
+*/
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+#include "kstate.h"
+#include "kobject.h"
+#include "kapplicative.h"
+#include "koperative.h"
+#include "kcontinuation.h"
+#include "kerror.h"
+#include "kblob.h"
+
+#include "kghelpers.h"
+#include "kgblobs.h"
+#include "kgnumbers.h" /* for keintegerp & knegativep */
+
+/* 13.1.1? blob? */
+/* uses typep */
+
+/* 13.1.2? make-blob */
+void make_blob(klisp_State *K, TValue *xparams, TValue ptree, TValue denv)
+{
+ UNUSED(xparams);
+ UNUSED(denv);
+ bind_al1tp(K, ptree, "exact integer", keintegerp, tv_s,
+ maybe_byte);
+
+ uint8_t fill = 0;
+ if (get_opt_tpar(K, "make-blob", K_TFIXINT, &maybe_byte)) {
+ if (ivalue(maybe_byte) < 0 || ivalue(maybe_byte) > 255) {
+ klispE_throw_simple(K, "bad fill byte");
+ return;
+ }
+ fill = ivalue(maybe_byte);
+ }
+
+ if (knegativep(K, tv_s)) {
+ klispE_throw_simple(K, "negative size");
+ return;
+ } else if (!ttisfixint(tv_s)) {
+ klispE_throw_simple(K, "size is too big");
+ return;
+ }
+/* XXX/TODO */
+/* TValue new_blob = kblob_new_sf(K, ivalue(tv_s), fill); */
+ TValue new_blob = kblob_new(K, ivalue(tv_s));
+ if (fill != 0) {
+ int32_t s = ivalue(tv_s);
+ uint8_t *ptr = kblob_buf(new_blob);
+ while(s--)
+ *ptr++ = fill;
+ }
+
+ kapply_cc(K, new_blob);
+}
+
+/* 13.1.3? blob-length */
+void blob_length(klisp_State *K, TValue *xparams, TValue ptree,
+ TValue denv)
+{
+ UNUSED(xparams);
+ UNUSED(denv);
+ bind_1tp(K, ptree, "blob", ttisblob, blob);
+
+ TValue res = i2tv(kblob_size(blob));
+ kapply_cc(K, res);
+}
+
+/* 13.1.4? blob-u8-ref */
+void blob_u8_ref(klisp_State *K, TValue *xparams, TValue ptree, TValue denv)
+{
+ UNUSED(xparams);
+ UNUSED(denv);
+ bind_2tp(K, ptree, "blob", ttisblob, blob,
+ "exact integer", keintegerp, tv_i);
+
+ if (!ttisfixint(tv_i)) {
+ /* TODO show index */
+ klispE_throw_simple(K, "index out of bounds");
+ return;
+ }
+ int32_t i = ivalue(tv_i);
+
+ if (i < 0 || i >= kblob_size(blob)) {
+ /* TODO show index */
+ klispE_throw_simple(K, "index out of bounds");
+ return;
+ }
+
+ TValue res = i2tv(kblob_buf(blob)[i]);
+ kapply_cc(K, res);
+}
+
+/* 13.1.5? blob-u8-set! */
+void blob_u8_setS(klisp_State *K, TValue *xparams, TValue ptree, TValue denv)
+{
+ UNUSED(xparams);
+ UNUSED(denv);
+ bind_3tp(K, ptree, "blob", ttisblob, blob,
+ "exact integer", keintegerp, tv_i, "exact integer", keintegerp, tv_byte);
+
+ if (!ttisfixint(tv_i)) {
+ /* TODO show index */
+ klispE_throw_simple(K, "index out of bounds");
+ return;
+ } else if (kblob_immutablep(blob)) {
+ klispE_throw_simple(K, "immutable blob");
+ return;
+ } else if (ivalue(tv_byte) < 0 || ivalue(tv_byte) > 255) {
+ klispE_throw_simple(K, "bad byte");
+ return;
+ }
+
+ int32_t i = ivalue(tv_i);
+
+ if (i < 0 || i >= kblob_size(blob)) {
+ /* TODO show index */
+ klispE_throw_simple(K, "index out of bounds");
+ return;
+ }
+
+ kblob_buf(blob)[i] = (uint8_t) ivalue(tv_byte);
+ kapply_cc(K, KINERT);
+}
+
+/* TODO change blob constructors to string like constructors */
+
+/* 13.2.8? blob-copy */
+/* TEMP: at least for now this always returns mutable blobs */
+void blob_copy(klisp_State *K, TValue *xparams, TValue ptree, TValue denv)
+{
+ UNUSED(xparams);
+ UNUSED(denv);
+ bind_1tp(K, ptree, "blob", ttisblob, blob);
+
+ TValue new_blob;
+ /* the if isn't strictly necessary but it's clearer this way */
+ if (tv_equal(blob, K->empty_blob)) {
+ new_blob = blob;
+ } else {
+ new_blob = kblob_new(K, kblob_size(blob));
+ memcpy(kblob_buf(new_blob), kblob_buf(blob), kblob_size(blob));
+ }
+ kapply_cc(K, new_blob);
+}
+
+/* 13.2.9? blob->immutable-blob */
+void blob_to_immutable_blob(klisp_State *K, TValue *xparams,
+ TValue ptree, TValue denv)
+{
+ UNUSED(xparams);
+ UNUSED(denv);
+ bind_1tp(K, ptree, "blob", ttisblob, blob);
+
+ TValue res_blob;
+ if (kblob_immutablep(blob)) {/* this includes the empty blob */
+ res_blob = blob;
+ } else {
+ res_blob = kblob_new_imm(K, kblob_size(blob));
+ memcpy(kblob_buf(res_blob), kblob_buf(blob), kblob_size(blob));
+ }
+ kapply_cc(K, res_blob);
+}
+
+/* init ground */
+void kinit_blobs_ground_env(klisp_State *K)
+{
+ TValue ground_env = K->ground_env;
+ TValue symbol, value;
+
+ /*
+ ** This section is not in the report. The bindings here are
+ ** taken from the r7rs scheme draft and should not be considered standard.
+ ** They are provided in the meantime to allow programs to use byte vectors.
+ */
+
+ /* ??.1.1? blob? */
+ add_applicative(K, ground_env, "blob?", typep, 2, symbol,
+ i2tv(K_TBLOB));
+ /* ??.1.2? make-blob */
+ add_applicative(K, ground_env, "make-blob", make_blob, 0);
+ /* ??.1.3? blob-length */
+ add_applicative(K, ground_env, "blob-length", blob_length, 0);
+
+ /* ??.1.4? blob-u8-ref */
+ add_applicative(K, ground_env, "blob-u8-ref", blob_u8_ref, 0);
+ /* ??.1.5? blob-u8-set! */
+ add_applicative(K, ground_env, "blob-u8-set!", blob_u8_setS, 0);
+
+ /* ??.1.?? blob-copy */
+ add_applicative(K, ground_env, "blob-copy", blob_copy, 0);
+ /* ??.1.?? blob->immutable-blob */
+ add_applicative(K, ground_env, "blob->immutable-blob", blob_to_immutable_blob, 0);
+
+/* TODO put the blob equivalents here */
+#if 0
+ /* 13.2.1? string */
+ add_applicative(K, ground_env, "string", string, 0);
+ /* 13.2.2? string=?, string-ci=? */
+ add_applicative(K, ground_env, "string=?", ftyped_bpredp, 3,
+ symbol, p2tv(kstringp), p2tv(kstring_eqp));
+ add_applicative(K, ground_env, "string-ci=?", ftyped_bpredp, 3,
+ symbol, p2tv(kstringp), p2tv(kstring_ci_eqp));
+ /* 13.2.3? string<?, string<=?, string>?, string>=? */
+ add_applicative(K, ground_env, "string<?", ftyped_bpredp, 3,
+ symbol, p2tv(kstringp), p2tv(kstring_ltp));
+ add_applicative(K, ground_env, "string<=?", ftyped_bpredp, 3,
+ symbol, p2tv(kstringp), p2tv(kstring_lep));
+ add_applicative(K, ground_env, "string>?", ftyped_bpredp, 3,
+ symbol, p2tv(kstringp), p2tv(kstring_gtp));
+ add_applicative(K, ground_env, "string>=?", ftyped_bpredp, 3,
+ symbol, p2tv(kstringp), p2tv(kstring_gep));
+ /* 13.2.4? string-ci<?, string-ci<=?, string-ci>?, string-ci>=? */
+ add_applicative(K, ground_env, "string-ci<?", ftyped_bpredp, 3,
+ symbol, p2tv(kstringp), p2tv(kstring_ci_ltp));
+ add_applicative(K, ground_env, "string-ci<=?", ftyped_bpredp, 3,
+ symbol, p2tv(kstringp), p2tv(kstring_ci_lep));
+ add_applicative(K, ground_env, "string-ci>?", ftyped_bpredp, 3,
+ symbol, p2tv(kstringp), p2tv(kstring_ci_gtp));
+ add_applicative(K, ground_env, "string-ci>=?", ftyped_bpredp, 3,
+ symbol, p2tv(kstringp), p2tv(kstring_ci_gep));
+ /* 13.2.5? substring */
+ add_applicative(K, ground_env, "substring", substring, 0);
+ /* 13.2.6? string-append */
+ add_applicative(K, ground_env, "string-append", string_append, 0);
+ /* 13.2.7? string->list, list->string */
+ add_applicative(K, ground_env, "string->list", string_to_list, 0);
+ add_applicative(K, ground_env, "list->string", list_to_string, 0);
+ /* 13.2.8? string-copy */
+ add_applicative(K, ground_env, "string-copy", string_copy, 0);
+ /* 13.2.9? string->immutable-string */
+ add_applicative(K, ground_env, "string->immutable-string",
+ string_to_immutable_string, 0);
+
+ /* TODO: add string-immutable? or general immutable? */
+ /* TODO: add string-upcase and string-downcase like in r7rs-draft */
+
+ /* 13.2.10? string-fill! */
+ add_applicative(K, ground_env, "string-fill!", string_fillS, 0);
+#endif
+}
diff --git a/src/kgblobs.h b/src/kgblobs.h
@@ -0,0 +1,48 @@
+/*
+** kgblobs.h
+** Blobs features for the ground environment
+** See Copyright Notice in klisp.h
+*/
+
+#ifndef kgblobs_h
+#define kgblobs_h
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+#include "kobject.h"
+#include "klisp.h"
+#include "kstate.h"
+#include "kghelpers.h"
+
+/* ??.1.1? blob? */
+/* uses typep */
+
+/* ??.1.2? make-blob */
+void make_blob(klisp_State *K, TValue *xparams, TValue ptree, TValue denv);
+
+/* ??.1.3? blob-length */
+void blob_length(klisp_State *K, TValue *xparams, TValue ptree,
+ TValue denv);
+
+/* ??.1.4? blob-u8-ref */
+void blob_u8_ref(klisp_State *K, TValue *xparams, TValue ptree, TValue denv);
+
+/* ??.1.5? blob-u8-set! */
+void blob_u8_setS(klisp_State *K, TValue *xparams, TValue ptree, TValue denv);
+
+/* ??.2.?? blob-copy */
+void blob_copy(klisp_State *K, TValue *xparams,
+ TValue ptree, TValue denv);
+
+/* ??.2.?? blob->immutable-blob */
+void blob_to_immutable_blob(klisp_State *K, TValue *xparams,
+ TValue ptree, TValue denv);
+
+/* init ground */
+void kinit_blobs_ground_env(klisp_State *K);
+
+#endif
diff --git a/src/kgc.c b/src/kgc.c
@@ -20,6 +20,7 @@
#include "imrat.h"
#include "ktable.h"
#include "kstring.h"
+#include "kblob.h"
#include "kerror.h"
#define GCSTEPSIZE 1024u
@@ -319,6 +320,11 @@ static int32_t propagatemark (klisp_State *K) {
markvalue(K, e->irritants);
return sizeof(Error);
}
+ case K_TBLOB: {
+ Blob *b = cast(Blob *, o);
+ markvalue(K, b->mark);
+ return sizeof(String) + b->size * sizeof(uint8_t);
+ }
default:
fprintf(stderr, "Unknown GCObject type (in GC propagate): %d\n",
type);
@@ -449,6 +455,9 @@ static void freeobj (klisp_State *K, GCObject *o) {
case K_TERROR:
klispE_free(K, (Error *)o);
break;
+ case K_TBLOB:
+ klispM_freemem(K, o, sizeof(Blob)+o->blob.size);
+ break;
default:
/* shouldn't happen */
fprintf(stderr, "Unknown GCObject type (in GC free): %d\n",
@@ -573,7 +582,9 @@ static void markroot (klisp_State *K) {
markvalue(K, K->kd_in_port_key);
markvalue(K, K->kd_out_port_key);
+ markvalue(K, K->kd_error_port_key);
markvalue(K, K->empty_string);
+ markvalue(K, K->empty_blob);
markvalue(K, K->ktok_lparen);
markvalue(K, K->ktok_rparen);
diff --git a/src/kgeqp.h b/src/kgeqp.h
@@ -28,6 +28,8 @@ void eqp(klisp_State *K, TValue *xparams, TValue ptree, TValue denv);
/* Helper (also used in equal?) */
inline bool eq2p(klisp_State *K, TValue obj1, TValue obj2)
{
+ /* TODO/FIXME: immutable blobs aren't interned and so will compare
+ as un-eq? even if the contents are the same */
bool res = (tv_equal(obj1, obj2));
if (!res && (ttype(obj1) == ttype(obj2))) {
switch (ttype(obj1)) {
diff --git a/src/kgequalp.c b/src/kgequalp.c
@@ -14,6 +14,7 @@
#include "kobject.h"
#include "kpair.h"
#include "kstring.h" /* for kstring_equalp */
+#include "kblob.h" /* for kblob_equalp */
#include "kcontinuation.h"
#include "kerror.h"
@@ -196,6 +197,11 @@ bool equal2p(klisp_State *K, TValue obj1, TValue obj2)
result = false;
break;
}
+ } else if (ttisblob(obj1) && ttisblob(obj2)) {
+ if (!kblob_equalp(obj1, obj2)) {
+ result = false;
+ break;
+ }
} else {
result = false;
break;
diff --git a/src/kgpair_mut.c b/src/kgpair_mut.c
@@ -273,7 +273,7 @@ TValue appendB_get_lss_endpoints(klisp_State *K, TValue lss, int32_t apairs,
TValue tail = lss;
/* this is a list of last pairs using the marks to link the pairs) */
TValue last_pairs = KNIL;
- TValue last_apair;
+ TValue last_apair = KNIL;
while(apairs != 0 || cpairs != 0) {
int32_t pairs;
diff --git a/src/kgports.c b/src/kgports.c
@@ -1,5 +1,5 @@
/*
-** kgports.h
+** kgports.c
** Ports features for the ground environment
** See Copyright Notice in klisp.h
*/
@@ -564,15 +564,21 @@ void kinit_ports_ground_env(klisp_State *K)
add_applicative(K, ground_env, "output-port?", ftypep, 2, symbol,
p2tv(kis_output_port));
/* 15.1.3 with-input-from-file, with-ouput-to-file */
+ /* 15.1.? with-error-to-file */
add_applicative(K, ground_env, "with-input-from-file", with_file,
3, symbol, b2tv(false), K->kd_in_port_key);
add_applicative(K, ground_env, "with-output-to-file", with_file,
3, symbol, b2tv(true), K->kd_out_port_key);
+ add_applicative(K, ground_env, "with-error-to-file", with_file,
+ 3, symbol, b2tv(true), K->kd_error_port_key);
/* 15.1.4 get-current-input-port, get-current-output-port */
+ /* 15.1.? get-current-error-port */
add_applicative(K, ground_env, "get-current-input-port", get_current_port,
2, symbol, K->kd_in_port_key);
add_applicative(K, ground_env, "get-current-output-port", get_current_port,
2, symbol, K->kd_out_port_key);
+ add_applicative(K, ground_env, "get-current-error-port", get_current_port,
+ 2, symbol, K->kd_error_port_key);
/* 15.1.5 open-input-file, open-output-file */
add_applicative(K, ground_env, "open-input-file", open_file, 2, symbol,
b2tv(false));
diff --git a/src/kgports.h b/src/kgports.h
@@ -25,10 +25,12 @@
/* use ftypep */
/* 15.1.3 with-input-from-file, with-ouput-to-file */
+/* 15.1.? with-error-to-file */
void with_file(klisp_State *K, TValue *xparams, TValue ptree,
TValue denv);
/* 15.1.4 get-current-input-port, get-current-output-port */
+/* 15.1.? get-current-error-port */
void get_current_port(klisp_State *K, TValue *xparams, TValue ptree,
TValue denv);
diff --git a/src/kground.c b/src/kground.c
@@ -35,6 +35,8 @@
#include "kgstrings.h"
#include "kgchars.h"
#include "kgports.h"
+#include "kgblobs.h"
+#include "kgsystem.h"
/* for initing cont names */
#include "ktable.h"
@@ -130,6 +132,8 @@ void kinit_ground_env(klisp_State *K)
kinit_strings_ground_env(K);
kinit_chars_ground_env(K);
kinit_ports_ground_env(K);
+ kinit_blobs_ground_env(K);
+ kinit_system_ground_env(K);
/*
** Initialize the names of the continuation used in
diff --git a/src/kgstrings.c b/src/kgstrings.c
@@ -487,6 +487,4 @@ void kinit_strings_ground_env(klisp_State *K)
/* 13.2.10? string-fill! */
add_applicative(K, ground_env, "string-fill!", string_fillS, 0);
-
-
}
diff --git a/src/kgsystem.c b/src/kgsystem.c
@@ -0,0 +1,95 @@
+/*
+** kgsystem.c
+** Ports features for the ground environment
+** See Copyright Notice in klisp.h
+*/
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <time.h>
+
+#include "kstate.h"
+#include "kobject.h"
+#include "kpair.h"
+#include "kerror.h"
+
+#include "kghelpers.h"
+#include "kgsystem.h"
+
+/*
+** SOURCE NOTE: These are all from the r7rs draft.
+*/
+
+/* ??.?.? current-second */
+void current_second(klisp_State *K, TValue *xparams, TValue ptree,
+ TValue denv)
+{
+ time_t now = time(NULL);
+ if (now == -1) {
+ klispE_throw_simple(K, "couldn't get time");
+ return;
+ } else {
+ if (now > INT32_MAX) {
+ /* XXX/TODO create bigint */
+ klispE_throw_simple(K, "integer too big");
+ return;
+ } else {
+ kapply_cc(K, i2tv((int32_t) now));
+ return;
+ }
+ }
+}
+
+/* ??.?.? current-jiffy */
+void current_jiffy(klisp_State *K, TValue *xparams, TValue ptree,
+ TValue denv)
+{
+ /* TODO, this may wrap around... use time+clock to a better number */
+ /* XXX doesn't seem to work... should probably use gettimeofday
+ in posix anyways */
+ clock_t now = clock();
+ if (now == -1) {
+ klispE_throw_simple(K, "couldn't get time");
+ return;
+ } else {
+ if (now > INT32_MAX) {
+ /* XXX/TODO create bigint */
+ klispE_throw_simple(K, "integer too big");
+ return;
+ } else {
+ kapply_cc(K, i2tv((int32_t) now));
+ return;
+ }
+ }
+}
+
+/* ??.?.? jiffies-per-second */
+void jiffies_per_second(klisp_State *K, TValue *xparams, TValue ptree,
+ TValue denv)
+{
+ if (CLOCKS_PER_SEC > INT32_MAX) {
+ /* XXX/TODO create bigint */
+ klispE_throw_simple(K, "integer too big");
+ return;
+ } else {
+ kapply_cc(K, i2tv((int32_t) CLOCKS_PER_SEC));
+ return;
+ }
+}
+
+/* init ground */
+void kinit_system_ground_env(klisp_State *K)
+{
+ TValue ground_env = K->ground_env;
+ TValue symbol, value;
+
+ /* ??.?.? current-second */
+ add_applicative(K, ground_env, "current-second", current_second, 0);
+ /* ??.?.? current-jiffy */
+ add_applicative(K, ground_env, "current-jiffy", current_jiffy, 0);
+ /* ??.?.? jiffies-per-second */
+ add_applicative(K, ground_env, "jiffies-per-second", jiffies_per_second,
+ 0);
+}
diff --git a/src/kgsystem.h b/src/kgsystem.h
@@ -0,0 +1,31 @@
+/*
+** kgsystem.h
+** System features for the ground environment
+** See Copyright Notice in klisp.h
+*/
+
+#ifndef kgsystem_h
+#define kgsystem_h
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+#include "kobject.h"
+#include "klisp.h"
+#include "kstate.h"
+#include "kghelpers.h"
+
+/* ??.?.? current-second */
+void current_second(klisp_State *K, TValue *xparams, TValue ptree,
+ TValue denv);
+/* ??.?.? current-jiffy */
+void current_jiffy(klisp_State *K, TValue *xparams, TValue ptree,
+ TValue denv);
+
+/* init ground */
+void kinit_system_ground_env(klisp_State *K);
+
+#endif
diff --git a/src/kobject.h b/src/kobject.h
@@ -161,6 +161,7 @@ typedef struct __attribute__ ((__packed__)) GCheader {
#define K_TPORT 39
#define K_TTABLE 40
#define K_TERROR 41
+#define K_TBLOB 42
/* for tables */
#define K_TDEADKEY 60
@@ -213,6 +214,7 @@ typedef struct __attribute__ ((__packed__)) GCheader {
#define K_TAG_PORT K_MAKE_VTAG(K_TPORT)
#define K_TAG_TABLE K_MAKE_VTAG(K_TTABLE)
#define K_TAG_ERROR K_MAKE_VTAG(K_TERROR)
+#define K_TAG_BLOB K_MAKE_VTAG(K_TBLOB)
/*
@@ -294,6 +296,7 @@ typedef struct __attribute__ ((__packed__)) GCheader {
#define ttisport(o) (tbasetype_(o) == K_TAG_PORT)
#define ttistable(o) (tbasetype_(o) == K_TAG_TABLE)
#define ttiserror(o) (tbasetype_(o) == K_TAG_ERROR)
+#define ttisblob(o) (tbasetype_(o) == K_TAG_BLOB)
/* macros to easily check boolean values */
#define kis_true(o_) (tv_equal((o_), KTRUE))
@@ -478,6 +481,15 @@ typedef struct __attribute__ ((__packed__)) {
TValue irritants; /* list of extra objs */
} Error;
+/* Blobs (binary vectors) */
+typedef struct __attribute__ ((__packed__)) {
+ CommonHeader;
+ TValue mark; /* for cycle/sharing aware algorithms */
+ uint32_t size;
+ int32_t __dummy; /* for alignment to 64 bits */
+ uint8_t b[]; /* buffer */
+} Blob;
+
/*
** `module' operation for hashing (size is always a power of 2)
*/
@@ -505,7 +517,7 @@ typedef struct __attribute__ ((__packed__)) {
TValue mark; /* for cycle/sharing aware algorithms */
uint32_t size;
uint32_t hash; /* only used for immutable strings */
- char b[]; // buffer
+ char b[]; /* buffer */
} String;
/* MAYBE: mark fields could be replaced by a hashtable or a bit + a hashtable */
@@ -536,6 +548,7 @@ union GCObject {
Promise prom;
Port port;
Table table;
+ Blob blob;
};
@@ -637,6 +650,7 @@ const TValue kfree;
#define gc2port(o_) (gc2tv(K_TAG_PORT, o_))
#define gc2table(o_) (gc2tv(K_TAG_TABLE, o_))
#define gc2error(o_) (gc2tv(K_TAG_ERROR, o_))
+#define gc2blob(o_) (gc2tv(K_TAG_BLOB, o_))
#define gc2deadkey(o_) (gc2tv(K_TAG_DEADKEY, o_))
/* Macro to convert a TValue into a specific heap allocated object */
@@ -654,6 +668,7 @@ const TValue kfree;
#define tv2port(v_) ((Port *) gcvalue(v_))
#define tv2table(v_) ((Table *) gcvalue(v_))
#define tv2error(v_) ((Error *) gcvalue(v_))
+#define tv2blob(v_) ((Blob *) gcvalue(v_))
#define tv2gch(v_) ((GCheader *) gcvalue(v_))
#define tv2mgch(v_) ((MGCheader *) gcvalue(v_))
diff --git a/src/krepl.c b/src/krepl.c
@@ -126,11 +126,9 @@ void do_repl_error(klisp_State *K, TValue *xparams, TValue obj)
** xparams[0]: dynamic environment
*/
- /* TEMP: should be better to have an error port
- like in scheme r6rs & r7rs (draft) */
/* FOR NOW used only for irritant list */
- TValue port = kcdr(K->kd_out_port_key);
- klisp_assert(kport_file(port) == stdout);
+ TValue port = kcdr(K->kd_error_port_key);
+ klisp_assert(kport_file(port) == stderr);
/* TEMP: obj should be an error obj */
if (ttiserror(obj)) {
@@ -152,15 +150,15 @@ void do_repl_error(klisp_State *K, TValue *xparams, TValue obj)
who_str = "?";
}
char *msg = kstring_buf(err_obj->msg);
- fprintf(stdout, "\n*ERROR*: \n");
- fprintf(stdout, "%s: %s", who_str, msg);
+ fprintf(stderr, "\n*ERROR*: \n");
+ fprintf(stderr, "%s: %s", who_str, msg);
krooted_tvs_push(K, obj);
/* Msg + irritants */
/* TODO move to a new function */
if (!ttisnil(err_obj->irritants)) {
- fprintf(stdout, ": ");
+ fprintf(stderr, ": ");
kwrite_display_to_port(K, port, err_obj->irritants, false);
}
kwrite_newline_to_port(K, port);
@@ -171,7 +169,7 @@ void do_repl_error(klisp_State *K, TValue *xparams, TValue obj)
/* TODO move to a new function */
/* MAYBE: remove */
if (khas_name(who) || khas_si(who)) {
- fprintf(stdout, "Location: ");
+ fprintf(stderr, "Location: ");
kwrite_display_to_port(K, port, who, false);
kwrite_newline_to_port(K, port);
}
@@ -179,7 +177,7 @@ void do_repl_error(klisp_State *K, TValue *xparams, TValue obj)
/* Backtrace */
/* TODO move to a new function */
TValue tv_cont = err_obj->cont;
- fprintf(stdout, "Backtrace: \n");
+ fprintf(stderr, "Backtrace: \n");
while(ttiscontinuation(tv_cont)) {
kwrite_display_to_port(K, port, tv_cont, false);
kwrite_newline_to_port(K, port);
@@ -192,7 +190,7 @@ void do_repl_error(klisp_State *K, TValue *xparams, TValue obj)
#endif
krooted_tvs_pop(K);
} else {
- fprintf(stdout, "\n*ERROR*: not an error object passed to "
+ fprintf(stderr, "\n*ERROR*: not an error object passed to "
"error continuation");
}
diff --git a/src/kstate.c b/src/kstate.c
@@ -34,6 +34,7 @@
#include "kstring.h"
#include "kport.h"
#include "ktable.h"
+#include "kblob.h"
#include "kgpairs_lists.h" /* for creating list_app */
@@ -90,6 +91,7 @@ klisp_State *klisp_newstate (klisp_Alloc f, void *ud) {
/* these are init later */
K->kd_in_port_key = KINERT;
K->kd_out_port_key = KINERT;
+ K->kd_error_port_key = KINERT;
/* strict arithmetic dynamic key */
/* this is init later */
@@ -149,6 +151,12 @@ klisp_State *klisp_newstate (klisp_Alloc f, void *ud) {
/* MAYBE: fix it so we can remove empty_string from roots */
K->empty_string = kstring_new_b_imm(K, "");
+ /* Empty blob */
+ /* MAYBE: fix it so we can remove empty_blob from roots */
+ /* XXX: find a better way to do this */
+ K->empty_blob = KNIL; /* trick constructor to create empty blob */
+ K->empty_blob = kblob_new_imm(K, 0);
+
/* initialize tokenizer */
/* WORKAROUND: for stdin line buffering & reading of EOF */
@@ -189,8 +197,11 @@ klisp_State *klisp_newstate (klisp_Alloc f, void *ud) {
false, stdin);
TValue out_port = kmake_std_port(K, kstring_new_b_imm(K, "*STDOUT*"),
true, stdout);
+ TValue error_port = kmake_std_port(K, kstring_new_b_imm(K, "*STDERR*"),
+ true, stderr);
K->kd_in_port_key = kcons(K, KTRUE, in_port);
K->kd_out_port_key = kcons(K, KTRUE, out_port);
+ K->kd_error_port_key = kcons(K, KTRUE, error_port);
/* strict arithmetic key, (starts as false) */
K->kd_strict_arith_key = kcons(K, KTRUE, KFALSE);
diff --git a/src/kstate.h b/src/kstate.h
@@ -103,15 +103,19 @@ struct klisp_State {
FILE *curr_in;
FILE *curr_out;
- /* for current-input-port, current-output-port */
+ /* for current-input-port, current-output-port, current-error-port */
TValue kd_in_port_key;
TValue kd_out_port_key;
+ TValue kd_error_port_key;
/* for strict-arithmetic */
TValue kd_strict_arith_key;
/* Strings */
TValue empty_string;
+
+ /* Blobs */
+ TValue empty_blob;
/* tokenizer */
/* special tokens, see ktoken.c for rationale */
@@ -495,6 +499,7 @@ void do_interception(klisp_State *K, TValue *xparams, TValue obj);
/* TODO: use these where appropriate */
#define kcurr_input_port(K) (tv2pair((K)->kd_in_port_key)->cdr)
#define kcurr_output_port(K) (tv2pair((K)->kd_out_port_key)->cdr)
+#define kcurr_error_port(K) (tv2pair((K)->kd_error_port_key)->cdr)
#define kcurr_strict_arithp(K) bvalue(tv2pair((K)->kd_strict_arith_key)->cdr)
#endif
diff --git a/src/kstring.h b/src/kstring.h
@@ -17,14 +17,14 @@
/* for immutable string table */
void klispS_resize (klisp_State *K, int32_t newsize);
-/*
-** Constructors for immutable strings
-*/
-
/* General constructor for strings */
TValue kstring_new_bs_g(klisp_State *K, bool m, const char *buf,
uint32_t size);
+/*
+** Constructors for immutable strings
+*/
+
/* main immutable string constructor */
/* with buffer & size */
TValue kstring_new_bs_imm(klisp_State *K, const char *buf, uint32_t size);
@@ -66,6 +66,7 @@ TValue kstring_new_sf(klisp_State *K, uint32_t size, char fill);
#define kstring_new_sf_imm(K_, size_, fill_) \
kstring_new_sf_g(K_, false, size_, fill_)
#endif
+
/* some macros to access the parts of the string */
#define kstring_buf(tv_) (tv2str(tv_)->b)
#define kstring_size(tv_) (tv2str(tv_)->size)
@@ -75,9 +76,8 @@ TValue kstring_new_sf(klisp_State *K, uint32_t size, char fill);
#define kstring_immutablep(tv_) (kis_immutable(tv_))
/* both obj1 and obj2 should be strings, this compares char by char
- but differentiates immutable from mutable strings */
+ and doesn't differentiate immutable from mutable strings */
bool kstring_equalp(TValue obj1, TValue obj2);
-
bool kstringp(TValue obj);
#endif
diff --git a/src/kwrite.c b/src/kwrite.c
@@ -23,6 +23,7 @@
#include "ktable.h"
#include "kport.h"
#include "kenvironment.h"
+#include "kblob.h"
/*
** Stack for the write FSM
@@ -442,6 +443,15 @@ void kwrite_simple(klisp_State *K, TValue obj)
kw_printf(K, "]");
break;
}
+ case K_TBLOB:
+ kw_printf(K, "#[blob");
+ #if KTRACK_NAMES
+ if (khas_name(obj)) {
+ kw_print_name(K, obj);
+ }
+ #endif
+ kw_printf(K, "]");
+ break;
default:
/* shouldn't happen */
kwrite_error(K, "unknown object type");