1
0
Fork 0
cl-sites/guile.html_node/About-Environments.html
2024-12-17 12:49:28 +01:00

109 lines
4.9 KiB
HTML

<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This manual documents Guile version 3.0.10.
Copyright (C) 1996-1997, 2000-2005, 2009-2023 Free Software Foundation,
Inc.
Copyright (C) 2021 Maxime Devos
Copyright (C) 2024 Tomas Volf
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License." -->
<title>About Environments (Guile Reference Manual)</title>
<meta name="description" content="About Environments (Guile Reference Manual)">
<meta name="keywords" content="About Environments (Guile Reference Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content=".texi2any-real">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="About-Closure.html" rel="up" title="About Closure">
<link href="Local-Variables.html" rel="next" title="Local Variables">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
span:hover a.copiable-link {visibility: visible}
ul.mark-bullet {list-style-type: disc}
-->
</style>
<link rel="stylesheet" type="text/css" href="https://www.gnu.org/software/gnulib/manual.css">
</head>
<body lang="en">
<div class="subsection-level-extent" id="About-Environments">
<div class="nav-panel">
<p>
Next: <a href="Local-Variables.html" accesskey="n" rel="next">Local Variables and Environments</a>, Up: <a href="About-Closure.html" accesskey="u" rel="up">The Concept of Closure</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h4 class="subsection" id="Names_002c-Locations_002c-Values-and-Environments"><span>3.4.1 Names, Locations, Values and Environments<a class="copiable-link" href="#Names_002c-Locations_002c-Values-and-Environments"> &para;</a></span></h4>
<a class="index-entry-id" id="index-location"></a>
<a class="index-entry-id" id="index-environment"></a>
<a class="index-entry-id" id="index-vcell"></a>
<a class="index-entry-id" id="index-top-level-environment"></a>
<a class="index-entry-id" id="index-environment_002c-top-level"></a>
<p>We said earlier that a variable name in a Scheme program is associated
with a location in which any kind of Scheme value may be stored.
(Incidentally, the term &ldquo;vcell&rdquo; is often used in Lisp and Scheme
circles as an alternative to &ldquo;location&rdquo;.) Thus part of what we mean
when we talk about &ldquo;creating a variable&rdquo; is in fact establishing an
association between a name, or identifier, that is used by the Scheme
program code, and the variable location to which that name refers.
Although the value that is stored in that location may change, the
location to which a given name refers is always the same.
</p>
<p>We can illustrate this by breaking down the operation of the
<code class="code">define</code> syntax into three parts: <code class="code">define</code>
</p>
<ul class="itemize mark-bullet">
<li>creates a new location
</li><li>establishes an association between that location and the name specified
as the first argument of the <code class="code">define</code> expression
</li><li>stores in that location the value obtained by evaluating the second
argument of the <code class="code">define</code> expression.
</li></ul>
<p>A collection of associations between names and locations is called an
<em class="dfn">environment</em>. When you create a top level variable in a program
using <code class="code">define</code>, the name-location association for that variable is
added to the &ldquo;top level&rdquo; environment. The &ldquo;top level&rdquo; environment
also includes name-location associations for all the procedures that are
supplied by standard Scheme.
</p>
<p>It is also possible to create environments other than the top level one,
and to create variable bindings, or name-location associations, in those
environments. This ability is a key ingredient in the concept of
closure; the next subsection shows how it is done.
</p>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Local-Variables.html">Local Variables and Environments</a>, Up: <a href="About-Closure.html">The Concept of Closure</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>