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

84 lines
3.7 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>Optional Arguments (Guile Reference Manual)</title>
<meta name="description" content="Optional Arguments (Guile Reference Manual)">
<meta name="keywords" content="Optional Arguments (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="Procedures.html" rel="up" title="Procedures">
<link href="Case_002dlambda.html" rel="next" title="Case-lambda">
<link href="Compiled-Procedures.html" rel="prev" title="Compiled Procedures">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
span:hover a.copiable-link {visibility: visible}
-->
</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="Optional-Arguments">
<div class="nav-panel">
<p>
Next: <a href="Case_002dlambda.html" accesskey="n" rel="next">Case-lambda</a>, Previous: <a href="Compiled-Procedures.html" accesskey="p" rel="prev">Compiled Procedures</a>, Up: <a href="Procedures.html" accesskey="u" rel="up">Procedures</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="Optional-Arguments-1"><span>6.7.4 Optional Arguments<a class="copiable-link" href="#Optional-Arguments-1"> &para;</a></span></h4>
<p>Scheme procedures, as defined in R5RS, can either handle a fixed number
of actual arguments, or a fixed number of actual arguments followed by
arbitrarily many additional arguments. Writing procedures of variable
arity can be useful, but unfortunately, the syntactic means for handling
argument lists of varying length is a bit inconvenient. It is possible
to give names to the fixed number of arguments, but the remaining
(optional) arguments can be only referenced as a list of values
(see <a class="pxref" href="Lambda.html">Lambda: Basic Procedure Creation</a>).
</p>
<p>For this reason, Guile provides an extension to <code class="code">lambda</code>,
<code class="code">lambda*</code>, which allows the user to define procedures with
optional and keyword arguments. In addition, Guile&rsquo;s virtual machine
has low-level support for optional and keyword argument dispatch.
Calls to procedures with optional and keyword arguments can be made
cheaply, without allocating a rest list.
</p>
<ul class="mini-toc">
<li><a href="lambda_002a-and-define_002a.html" accesskey="1">lambda* and define*.</a></li>
<li><a href="ice_002d9-optargs.html" accesskey="2">(ice-9 optargs)</a></li>
</ul>
</div>
</body>
</html>