klisp

an open source interpreter for the Kernel Programming Language.
git clone http://git.hanabi.in/repos/klisp.git
Log | Files | Refs | README

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:
Amanual/html/Alphabetical-Index.html | 379+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dmanual/html/Index.html | 379-------------------------------------------------------------------------------
Mmanual/html/Ports.html | 4++--
Mmanual/html/index.html | 2+-
Mmanual/klisp.info | 8++++----
Mmanual/src/index.texi | 2+-
Mmanual/src/klisp.texi | 2+-
Mmanual/src/ports.texi | 2+-
Msrc/Makefile | 25++++++++++++++++++-------
Asrc/kblob.c | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/kblob.h | 34++++++++++++++++++++++++++++++++++
Asrc/kgblobs.c | 250+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/kgblobs.h | 48++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/kgc.c | 11+++++++++++
Msrc/kgeqp.h | 2++
Msrc/kgequalp.c | 6++++++
Msrc/kgpair_mut.c | 2+-
Msrc/kgports.c | 8+++++++-
Msrc/kgports.h | 2++
Msrc/kground.c | 4++++
Msrc/kgstrings.c | 2--
Asrc/kgsystem.c | 95+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/kgsystem.h | 31+++++++++++++++++++++++++++++++
Msrc/kobject.h | 17++++++++++++++++-
Msrc/krepl.c | 18++++++++----------
Msrc/kstate.c | 11+++++++++++
Msrc/kstate.h | 7++++++-
Msrc/kstring.h | 12++++++------
Msrc/kwrite.c | 10++++++++++
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:&nbsp;<a rel="next" accesskey="n" href="../index.html#dir">(dir)</a>, +Previous:&nbsp;<a rel="previous" accesskey="p" href="Ports.html#Ports">Ports</a>, +Up:&nbsp;<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>&lt;=?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li> +<li><a href="Numbers.html#index-g_t_003c_003f-161"><code>&lt;?</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>&gt;=?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li> +<li><a href="Numbers.html#index-g_t_003e_003f-163"><code>&gt;?</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-&gt;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&lt;=?</code></a>: <a href="Characters.html#Characters">Characters</a></li> +<li><a href="Characters.html#index-char_002dci_003c_003f-244"><code>char-ci&lt;?</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&gt;=?</code></a>: <a href="Characters.html#Characters">Characters</a></li> +<li><a href="Characters.html#index-char_002dci_003e_003f-246"><code>char-ci&gt;?</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&lt;=?</code></a>: <a href="Characters.html#Characters">Characters</a></li> +<li><a href="Characters.html#index-char_003c_003f-239"><code>char&lt;?</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&gt;=?</code></a>: <a href="Characters.html#Characters">Characters</a></li> +<li><a href="Characters.html#index-char_003e_003f-241"><code>char&gt;?</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-&gt;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-&gt;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-&gt;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-&gt;exact</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li> +<li><a href="Numbers.html#index-real_002d_003einexact-189"><code>real-&gt;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-&gt;immutable-string</code></a>: <a href="Strings.html#Strings">Strings</a></li> +<li><a href="Strings.html#index-string_002d_003elist-234"><code>string-&gt;list</code></a>: <a href="Strings.html#Strings">Strings</a></li> +<li><a href="Symbols.html#index-string_002d_003esymbol-25"><code>string-&gt;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&lt;=?</code></a>: <a href="Strings.html#Strings">Strings</a></li> +<li><a href="Strings.html#index-string_002dci_003c_003f-220"><code>string-ci&lt;?</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&gt;=?</code></a>: <a href="Strings.html#Strings">Strings</a></li> +<li><a href="Strings.html#index-string_002dci_003e_003f-222"><code>string-ci&gt;?</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&lt;=?</code></a>: <a href="Strings.html#Strings">Strings</a></li> +<li><a href="Strings.html#index-string_003c_003f-215"><code>string&lt;?</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&gt;=?</code></a>: <a href="Strings.html#Strings">Strings</a></li> +<li><a href="Strings.html#index-string_003e_003f-217"><code>string&gt;?</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-&gt;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:&nbsp;<a rel="next" accesskey="n" href="../index.html#dir">(dir)</a>, -Previous:&nbsp;<a rel="previous" accesskey="p" href="Ports.html#Ports">Ports</a>, -Up:&nbsp;<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>&lt;=?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li> -<li><a href="Numbers.html#index-g_t_003c_003f-161"><code>&lt;?</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>&gt;=?</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li> -<li><a href="Numbers.html#index-g_t_003e_003f-163"><code>&gt;?</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-&gt;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&lt;=?</code></a>: <a href="Characters.html#Characters">Characters</a></li> -<li><a href="Characters.html#index-char_002dci_003c_003f-244"><code>char-ci&lt;?</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&gt;=?</code></a>: <a href="Characters.html#Characters">Characters</a></li> -<li><a href="Characters.html#index-char_002dci_003e_003f-246"><code>char-ci&gt;?</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&lt;=?</code></a>: <a href="Characters.html#Characters">Characters</a></li> -<li><a href="Characters.html#index-char_003c_003f-239"><code>char&lt;?</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&gt;=?</code></a>: <a href="Characters.html#Characters">Characters</a></li> -<li><a href="Characters.html#index-char_003e_003f-241"><code>char&gt;?</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-&gt;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-&gt;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-&gt;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-&gt;exact</code></a>: <a href="Numbers.html#Numbers">Numbers</a></li> -<li><a href="Numbers.html#index-real_002d_003einexact-189"><code>real-&gt;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-&gt;immutable-string</code></a>: <a href="Strings.html#Strings">Strings</a></li> -<li><a href="Strings.html#index-string_002d_003elist-234"><code>string-&gt;list</code></a>: <a href="Strings.html#Strings">Strings</a></li> -<li><a href="Symbols.html#index-string_002d_003esymbol-25"><code>string-&gt;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&lt;=?</code></a>: <a href="Strings.html#Strings">Strings</a></li> -<li><a href="Strings.html#index-string_002dci_003c_003f-220"><code>string-ci&lt;?</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&gt;=?</code></a>: <a href="Strings.html#Strings">Strings</a></li> -<li><a href="Strings.html#index-string_002dci_003e_003f-222"><code>string-ci&gt;?</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&lt;=?</code></a>: <a href="Strings.html#Strings">Strings</a></li> -<li><a href="Strings.html#index-string_003c_003f-215"><code>string&lt;?</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&gt;=?</code></a>: <a href="Strings.html#Strings">Strings</a></li> -<li><a href="Strings.html#index-string_003e_003f-217"><code>string&gt;?</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-&gt;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:&nbsp;<a rel="next" accesskey="n" href="Index.html#Index">Index</a>, +Next:&nbsp;<a rel="next" accesskey="n" href="Alphabetical-Index.html#Alphabetical-Index">Alphabetical Index</a>, Previous:&nbsp;<a rel="previous" accesskey="p" href="Characters.html#Characters">Characters</a>, Up:&nbsp;<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:&nbsp;<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");