This file is indexed.

/usr/share/doc/racket/inside/Procedures.html is in racket-doc 6.1-4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>7&nbsp;Procedures</title><link rel="stylesheet" type="text/css" href="../scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="../racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../doc-site.css" title="default"/><script type="text/javascript" src="../scribble-common.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../doc-site.js"></script><script type="text/javascript" src="../local-redirect/local-redirect.js"></script><script type="text/javascript" src="../local-redirect/local-user-redirect.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="doc-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9660;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">Inside:<span class="mywbr"> &nbsp;</span> Racket C API</a></td></tr></table></div><div class="tocviewsublistonly" style="display: block;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="overview.html" class="tocviewlink" data-pltdoc="x">Overview</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="embedding.html" class="tocviewlink" data-pltdoc="x">Embedding into a Program</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="Writing_Racket_Extensions.html" class="tocviewlink" data-pltdoc="x">Writing Racket Extensions</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="im_values_types.html" class="tocviewlink" data-pltdoc="x">Values and Types</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="im_memoryalloc.html" class="tocviewlink" data-pltdoc="x">Memory Allocation</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="im_env.html" class="tocviewlink" data-pltdoc="x">Namespaces and Modules</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="" class="tocviewselflink" data-pltdoc="x">Procedures</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="Evaluation.html" class="tocviewlink" data-pltdoc="x">Evaluation</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="exceptions.html" class="tocviewlink" data-pltdoc="x">Exceptions and Escape Continuations</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="threads.html" class="tocviewlink" data-pltdoc="x">Threads</a></td></tr><tr><td align="right">11&nbsp;</td><td><a href="config.html" class="tocviewlink" data-pltdoc="x">Parameterizations</a></td></tr><tr><td align="right">12&nbsp;</td><td><a href="contmarks.html" class="tocviewlink" data-pltdoc="x">Continuation Marks</a></td></tr><tr><td align="right">13&nbsp;</td><td><a href="im_encodings.html" class="tocviewlink" data-pltdoc="x">String Encodings</a></td></tr><tr><td align="right">14&nbsp;</td><td><a href="Bignums__Rationals__and_Complex_Numbers.html" class="tocviewlink" data-pltdoc="x">Bignums, Rationals, and Complex Numbers</a></td></tr><tr><td align="right">15&nbsp;</td><td><a href="Ports_and_the_Filesystem.html" class="tocviewlink" data-pltdoc="x">Ports and the Filesystem</a></td></tr><tr><td align="right">16&nbsp;</td><td><a href="Structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">17&nbsp;</td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Security Guards</a></td></tr><tr><td align="right">18&nbsp;</td><td><a href="Custodians.html" class="tocviewlink" data-pltdoc="x">Custodians</a></td></tr><tr><td align="right">19&nbsp;</td><td><a href="Subprocesses.html" class="tocviewlink" data-pltdoc="x">Subprocesses</a></td></tr><tr><td align="right">20&nbsp;</td><td><a href="Miscellaneous_Utilities.html" class="tocviewlink" data-pltdoc="x">Miscellaneous Utilities</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div></div></div><div class="maincolumn"><div class="main"><div class="navsettop"><span class="navleft"><form class="searchform"><input class="searchbox" style="color: #888;" type="text" value="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;6.1&quot;, &quot;../&quot;);" onfocus="this.style.color=&quot;black&quot;; this.style.textAlign=&quot;left&quot;; if (this.value == &quot;...search manuals...&quot;) this.value=&quot;&quot;;" onblur="if (this.value.match(/^ *$/)) { this.style.color=&quot;#888&quot;; this.style.textAlign=&quot;center&quot;; this.value=&quot;...search manuals...&quot;; }"/></form>&nbsp;&nbsp;<a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;6.1&quot;);">top</a></span><span class="navright">&nbsp;&nbsp;<a href="im_env.html" title="backward to &quot;6 Namespaces and Modules&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="index.html" title="up to &quot;Inside: Racket C API&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="Evaluation.html" title="forward to &quot;8 Evaluation&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div><h3 x-source-module="(lib &quot;scribblings/inside/inside.scrbl&quot;)" x-part-tag="&quot;Procedures&quot;">7<tt>&nbsp;</tt><a name="(part._.Procedures)"></a>Procedures</h3><p>A <span style="font-style: italic">primitive procedure</span> is a Racket-callable procedure that is
implemented in C.  Primitive procedures are created in Racket with
the function <a href="#%28cpp._scheme_make_prim_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_prim_w_arity</span></a>, which takes a C function
pointer, the name of the primitive, and information about the number
of Racket arguments that it takes; it returns a Racket procedure
value.</p><p>The C function implementing the procedure must take two arguments: an
integer that specifies the number of arguments passed to the
procedure, and an array of <span class="stt">Scheme_Object*</span> arguments. The number
of arguments passed to the function will be checked using the arity
information.  (The arity information provided to
<a href="#%28cpp._scheme_make_prim_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_prim_w_arity</span></a> is also used for the Racket
<span class="RktSym">arity</span> procedure.) The procedure implementation is not allowed
to mutate the input array of arguments; as an exception, the procedure
can mutate the array if it is the same as the result of
<a href="#%28cpp._scheme_current_argument_stack%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_current_argument_stack</span></a>. The procedure may mutate the
arguments themselves when appropriate (e.g., a fill in a vector
argument).</p><p>The function <a href="#%28cpp._scheme_make_prim_closure_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_prim_closure_w_arity</span></a> is similar to
<a href="#%28cpp._scheme_make_prim_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_prim_w_arity</span></a>, but it takes an additional count and
<span class="stt">Scheme_Object*</span> array that is copied into the created procedure;
the procedure is passed back to the C function when the closure is
invoked. In this way, closure-like data from the C world can be
associated with the primitive procedure.</p><p>The function <a href="#%28cpp._scheme_make_closed_prim_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_closed_prim_w_arity</span></a> is similar to
<a href="#%28cpp._scheme_make_prim_closure_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_prim_closure_w_arity</span></a>, but it uses an older calling
convention for passing closure data.</p><p>To work well with Scheme threads, a C function that performs
substantial or unbounded work should occasionally call
<span class="stt">SCHEME_USE_FUEL</span>; see <a href="threads.html#%28part._usefuel%29" data-pltdoc="x">Allowing Thread Switches</a> for details.</p><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="stt">Scheme_Object*</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><a name="(cpp._scheme_make_prim_w_arity)"></a><a name="(idx._(gentag._299._(lib._scribblings/inside/inside..scrbl)))"></a><a href="#%28cpp._scheme_make_prim_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_prim_w_arity</span></a></p></td><td><p><span class="stt">(</span></p></td><td><p><span class="stt">Scheme_Prim*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">prim</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">char*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">name</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">int</span><span class="hspace">&nbsp;</span><span style="font-style: italic">mina</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">int</span><span class="hspace">&nbsp;</span><span style="font-style: italic">maxa</span><span class="stt">)</span></p></td></tr></table></td></tr></table></div><div class="SIntrapara">Creates a primitive procedure value, given the C function pointer
<span style="font-style: italic">prim</span>.  The form of <span style="font-style: italic">prim</span> is defined by:</div></p><p><table cellspacing="0" cellpadding="0"><tr><td><p><span class="hspace">&nbsp;&nbsp;</span><span class="stt">typedef Scheme_Object *(Scheme_Prim)(int argc,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;</span><span class="stt"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="stt">Scheme_Object **argv);</span></p></td></tr></table></p><p>The value <span style="font-style: italic">mina</span> should be the minimum number of arguments that
must be supplied to the procedure. The value <span style="font-style: italic">maxa</span> should be the
maximum number of arguments that can be supplied to the procedure, or
-1 if the procedure can take arbitrarily many arguments. The
<span style="font-style: italic">mina</span> and <span style="font-style: italic">maxa</span> values are used for automatically checking
the argument count before the primitive is invoked, and also for the
Racket <a name="(idx._(gentag._300._(lib._scribblings/inside/inside..scrbl)))"></a><span class="RktSym">arity</span> procedure. The <span style="font-style: italic">name</span> argument is
used to report application arity errors at run-time.</p><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="stt">Scheme_Object*</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><a name="(cpp._scheme_make_folding_prim)"></a><a name="(idx._(gentag._301._(lib._scribblings/inside/inside..scrbl)))"></a><a href="#%28cpp._scheme_make_folding_prim%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_folding_prim</span></a></p></td><td><p><span class="stt">(</span></p></td><td><p><span class="stt">Scheme_Prim*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">prim</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">char*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">name</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">int</span><span class="hspace">&nbsp;</span><span style="font-style: italic">mina</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">int</span><span class="hspace">&nbsp;</span><span style="font-style: italic">maxa</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">short</span><span class="hspace">&nbsp;</span><span style="font-style: italic">folding</span><span class="stt">)</span></p></td></tr></table></td></tr></table></div><div class="SIntrapara">Like <a href="#%28cpp._scheme_make_prim_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_prim_w_arity</span></a>, but if <span style="font-style: italic">folding</span> is non-zero,
the compiler assumes that an application of the procedure to constant
values can be folded to a constant. For example, <span class="RktSym"><a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=reference&amp;rel=generic-numbers.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._%252B%2529%2529&amp;version=6.1" class="RktValLink Sq" data-pltdoc="x">+</a></span>,
<span class="RktSym"><a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=reference&amp;rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._zero%7E3f%2529%2529&amp;version=6.1" class="RktValLink Sq" data-pltdoc="x">zero?</a></span>, and <span class="RktSym"><a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=reference&amp;rel=strings.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._string-length%2529%2529&amp;version=6.1" class="RktValLink Sq" data-pltdoc="x">string-length</a></span> are folding primitives, but
<span class="RktSym"><a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=reference&amp;rel=Writing.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._display%2529%2529&amp;version=6.1" class="RktValLink Sq" data-pltdoc="x">display</a></span> and <span class="RktSym"><a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=reference&amp;rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._cons%2529%2529&amp;version=6.1" class="RktValLink Sq" data-pltdoc="x">cons</a></span> are not.</div></p><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="stt">Scheme_Object*</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><a name="(cpp._scheme_make_prim)"></a><a name="(idx._(gentag._302._(lib._scribblings/inside/inside..scrbl)))"></a><a href="#%28cpp._scheme_make_prim%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_prim</span></a></p></td><td><p><span class="stt">(</span></p></td><td><p><span class="stt">Scheme_Prim*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">prim</span><span class="stt">)</span></p></td></tr></table></td></tr></table></div><div class="SIntrapara">Same as <a href="#%28cpp._scheme_make_prim_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_prim_w_arity</span></a>, but the arity is (0, -1) and the
name &ldquo;UNKNOWN&rdquo; is assumed. This function is provided for backward
compatibility only.</div></p><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><table cellspacing="0" cellpadding="0"><tr><td colspan="3"><p><span class="stt">Scheme_Object*</span></p></td></tr><tr><td><p><a name="(cpp._scheme_make_prim_closure_w_arity)"></a><a name="(idx._(gentag._303._(lib._scribblings/inside/inside..scrbl)))"></a><a href="#%28cpp._scheme_make_prim_closure_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_prim_closure_w_arity</span></a></p></td><td><p><span class="stt">(</span></p></td><td><p><span class="stt">Scheme_Prim_Closure_Proc*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">prim</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">int</span><span class="hspace">&nbsp;</span><span style="font-style: italic">c</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">Scheme_Object**</span><span class="hspace">&nbsp;</span><span style="font-style: italic">vals</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">char*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">name</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">int</span><span class="hspace">&nbsp;</span><span style="font-style: italic">mina</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">int</span><span class="hspace">&nbsp;</span><span style="font-style: italic">maxa</span><span class="stt">)</span></p></td></tr></table></td></tr></table></div><div class="SIntrapara">Creates a primitive procedure value that includes the <span style="font-style: italic">c</span> values
in <span style="font-style: italic">vals</span>; when the C function <span style="font-style: italic">prim</span> is invoked, the
generated primitive is passed as the last parameter. The form of
<span style="font-style: italic">prim</span> is defined by:</div></p><p><table cellspacing="0" cellpadding="0"><tr><td><p><span class="hspace">&nbsp;&nbsp;</span><span class="stt">typedef</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;</span><span class="stt">Scheme_Object *(Scheme_Prim_Closure_Proc)(int argc,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;</span><span class="stt"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="stt">Scheme_Object **argv,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;</span><span class="stt"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="stt">Scheme_Object *prim);</span></p></td></tr></table></p><p>The macro <a name="(cpp._.S.C.H.E.M.E_.P.R.I.M_.C.L.O.S.U.R.E_.E.L.S)"></a><a name="(idx._(gentag._304._(lib._scribblings/inside/inside..scrbl)))"></a><a href="#%28cpp._.S.C.H.E.M.E_.P.R.I.M_.C.L.O.S.U.R.E_.E.L.S%29" class="RktStxLink" data-pltdoc="x"><span class="stt">SCHEME_PRIM_CLOSURE_ELS</span></a> takes a primitive-closure
object and returns an array with the same length and content as
<span style="font-style: italic">vals</span>. (3m: see <a href="im_memoryalloc.html#%28part._im~3a3m%29" data-pltdoc="x">Cooperating with 3m</a> for a caution about
<a href="#%28cpp._.S.C.H.E.M.E_.P.R.I.M_.C.L.O.S.U.R.E_.E.L.S%29" class="RktStxLink" data-pltdoc="x"><span class="stt">SCHEME_PRIM_CLOSURE_ELS</span></a>.)</p><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><table cellspacing="0" cellpadding="0"><tr><td colspan="3"><p><span class="stt">Scheme_Object*</span></p></td></tr><tr><td><p><a name="(cpp._scheme_make_closed_prim_w_arity)"></a><a name="(idx._(gentag._305._(lib._scribblings/inside/inside..scrbl)))"></a><a href="#%28cpp._scheme_make_closed_prim_w_arity%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_closed_prim_w_arity</span></a></p></td><td><p><span class="stt">(</span></p></td><td><p><span class="stt">Scheme_Closed_Prim*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">prim</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">void*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">data</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">char*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">name</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">int</span><span class="hspace">&nbsp;</span><span style="font-style: italic">mina</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">int</span><span class="hspace">&nbsp;</span><span style="font-style: italic">maxa</span><span class="stt">)</span></p></td></tr></table></td></tr></table></div><div class="SIntrapara">Creates an old-style primitive procedure value; when the C function
<span style="font-style: italic">prim</span> is invoked, <span style="font-style: italic">data</span> is passed as the first parameter.
The form of <span style="font-style: italic">prim</span> is defined by:</div></p><p><table cellspacing="0" cellpadding="0"><tr><td><p><span class="hspace">&nbsp;&nbsp;</span><span class="stt">typedef</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;</span><span class="stt">Scheme_Object *(Scheme_Closed_Prim)(void *data, int argc,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;</span><span class="stt"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="stt">Scheme_Object **argv);</span></p></td></tr></table></p><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="stt">Scheme_Object*</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><a name="(cpp._scheme_make_closed_prim)"></a><a name="(idx._(gentag._306._(lib._scribblings/inside/inside..scrbl)))"></a><a href="#%28cpp._scheme_make_closed_prim%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_make_closed_prim</span></a></p></td><td><p><span class="stt">(</span></p></td><td><p><span class="stt">Scheme_Closed_Prim*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">prim</span><span class="stt">,</span></p></td></tr><tr><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><span class="stt">void*</span><span class="hspace">&nbsp;</span><span style="font-style: italic">data</span><span class="stt">)</span></p></td></tr></table></td></tr></table></div><div class="SIntrapara">Creates a closed primitive procedure value without arity information.
This function is provided for backward compatibility only.</div></p><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="stt">Scheme_Object**</span></p></td><td><p><span class="hspace">&nbsp;</span></p></td><td><p><a name="(cpp._scheme_current_argument_stack)"></a><a name="(idx._(gentag._307._(lib._scribblings/inside/inside..scrbl)))"></a><a href="#%28cpp._scheme_current_argument_stack%29" class="RktStxLink" data-pltdoc="x"><span class="stt">scheme_current_argument_stack</span></a></p></td><td><p><span class="stt">(</span></p></td><td><p><span class="stt">)</span></p></td></tr></table></td></tr></table></div><div class="SIntrapara">Returns a pointer to an internal stack for argument passing. When the
argument array passed to a procedure corresponds to the current
argument stack address, the procedure is allowed to modify the
array. In particular, it might clear out pointers in the argument
array to allow the arguments to be reclaimed by the memory manager (if
they are not otherwise accessible).</div></p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" style="color: #888;" type="text" value="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;6.1&quot;, &quot;../&quot;);" onfocus="this.style.color=&quot;black&quot;; this.style.textAlign=&quot;left&quot;; if (this.value == &quot;...search manuals...&quot;) this.value=&quot;&quot;;" onblur="if (this.value.match(/^ *$/)) { this.style.color=&quot;#888&quot;; this.style.textAlign=&quot;center&quot;; this.value=&quot;...search manuals...&quot;; }"/></form>&nbsp;&nbsp;<a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;6.1&quot;);">top</a></span><span class="navright">&nbsp;&nbsp;<a href="im_env.html" title="backward to &quot;6 Namespaces and Modules&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="index.html" title="up to &quot;Inside: Racket C API&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="Evaluation.html" title="forward to &quot;8 Evaluation&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div></div></div><div id="contextindicator">&nbsp;</div></body></html>