More procedure-arguments-alist documentation and a bugfix
[bpt/guile.git] / doc / ref / api-procedures.texi
1 @c -*-texinfo-*-
2 @c This is part of the GNU Guile Reference Manual.
3 @c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2009, 2010,
4 @c 2011, 2012, 2013 Free Software Foundation, Inc.
5 @c See the file guile.texi for copying conditions.
6
7 @node Procedures
8 @section Procedures
9
10 @menu
11 * Lambda:: Basic procedure creation using lambda.
12 * Primitive Procedures:: Procedures defined in C.
13 * Compiled Procedures:: Scheme procedures can be compiled.
14 * Optional Arguments:: Handling keyword, optional and rest arguments.
15 * Case-lambda:: One function, multiple arities.
16 * Higher-Order Functions:: Function that take or return functions.
17 * Procedure Properties:: Procedure properties and meta-information.
18 * Procedures with Setters:: Procedures with setters.
19 * Inlinable Procedures:: Procedures that can be inlined.
20 @end menu
21
22
23 @node Lambda
24 @subsection Lambda: Basic Procedure Creation
25 @cindex lambda
26
27 A @code{lambda} expression evaluates to a procedure. The environment
28 which is in effect when a @code{lambda} expression is evaluated is
29 enclosed in the newly created procedure, this is referred to as a
30 @dfn{closure} (@pxref{About Closure}).
31
32 When a procedure created by @code{lambda} is called with some actual
33 arguments, the environment enclosed in the procedure is extended by
34 binding the variables named in the formal argument list to new locations
35 and storing the actual arguments into these locations. Then the body of
36 the @code{lambda} expression is evaluated sequentially. The result of
37 the last expression in the procedure body is then the result of the
38 procedure invocation.
39
40 The following examples will show how procedures can be created using
41 @code{lambda}, and what you can do with these procedures.
42
43 @lisp
44 (lambda (x) (+ x x)) @result{} @r{a procedure}
45 ((lambda (x) (+ x x)) 4) @result{} 8
46 @end lisp
47
48 The fact that the environment in effect when creating a procedure is
49 enclosed in the procedure is shown with this example:
50
51 @lisp
52 (define add4
53 (let ((x 4))
54 (lambda (y) (+ x y))))
55 (add4 6) @result{} 10
56 @end lisp
57
58
59 @deffn syntax lambda formals body
60 @var{formals} should be a formal argument list as described in the
61 following table.
62
63 @table @code
64 @item (@var{variable1} @dots{})
65 The procedure takes a fixed number of arguments; when the procedure is
66 called, the arguments will be stored into the newly created location for
67 the formal variables.
68 @item @var{variable}
69 The procedure takes any number of arguments; when the procedure is
70 called, the sequence of actual arguments will converted into a list and
71 stored into the newly created location for the formal variable.
72 @item (@var{variable1} @dots{} @var{variablen} . @var{variablen+1})
73 If a space-delimited period precedes the last variable, then the
74 procedure takes @var{n} or more variables where @var{n} is the number
75 of formal arguments before the period. There must be at least one
76 argument before the period. The first @var{n} actual arguments will be
77 stored into the newly allocated locations for the first @var{n} formal
78 arguments and the sequence of the remaining actual arguments is
79 converted into a list and the stored into the location for the last
80 formal argument. If there are exactly @var{n} actual arguments, the
81 empty list is stored into the location of the last formal argument.
82 @end table
83
84 The list in @var{variable} or @var{variablen+1} is always newly
85 created and the procedure can modify it if desired. This is the case
86 even when the procedure is invoked via @code{apply}, the required part
87 of the list argument there will be copied (@pxref{Fly Evaluation,,
88 Procedures for On the Fly Evaluation}).
89
90 @var{body} is a sequence of Scheme expressions which are evaluated in
91 order when the procedure is invoked.
92 @end deffn
93
94 @node Primitive Procedures
95 @subsection Primitive Procedures
96 @cindex primitives
97 @cindex primitive procedures
98
99 Procedures written in C can be registered for use from Scheme,
100 provided they take only arguments of type @code{SCM} and return
101 @code{SCM} values. @code{scm_c_define_gsubr} is likely to be the most
102 useful mechanism, combining the process of registration
103 (@code{scm_c_make_gsubr}) and definition (@code{scm_define}).
104
105 @deftypefun SCM scm_c_make_gsubr (const char *name, int req, int opt, int rst, fcn)
106 Register a C procedure @var{fcn} as a ``subr'' --- a primitive
107 subroutine that can be called from Scheme. It will be associated with
108 the given @var{name} but no environment binding will be created. The
109 arguments @var{req}, @var{opt} and @var{rst} specify the number of
110 required, optional and ``rest'' arguments respectively. The total
111 number of these arguments should match the actual number of arguments
112 to @var{fcn}, but may not exceed 10. The number of rest arguments should be 0 or 1.
113 @code{scm_c_make_gsubr} returns a value of type @code{SCM} which is a
114 ``handle'' for the procedure.
115 @end deftypefun
116
117 @deftypefun SCM scm_c_define_gsubr (const char *name, int req, int opt, int rst, fcn)
118 Register a C procedure @var{fcn}, as for @code{scm_c_make_gsubr}
119 above, and additionally create a top-level Scheme binding for the
120 procedure in the ``current environment'' using @code{scm_define}.
121 @code{scm_c_define_gsubr} returns a handle for the procedure in the
122 same way as @code{scm_c_make_gsubr}, which is usually not further
123 required.
124 @end deftypefun
125
126 @node Compiled Procedures
127 @subsection Compiled Procedures
128
129 The evaluation strategy given in @ref{Lambda} describes how procedures
130 are @dfn{interpreted}. Interpretation operates directly on expanded
131 Scheme source code, recursively calling the evaluator to obtain the
132 value of nested expressions.
133
134 Most procedures are compiled, however. This means that Guile has done
135 some pre-computation on the procedure, to determine what it will need to
136 do each time the procedure runs. Compiled procedures run faster than
137 interpreted procedures.
138
139 Loading files is the normal way that compiled procedures come to
140 being. If Guile sees that a file is uncompiled, or that its compiled
141 file is out of date, it will attempt to compile the file when it is
142 loaded, and save the result to disk. Procedures can be compiled at
143 runtime as well. @xref{Read/Load/Eval/Compile}, for more information
144 on runtime compilation.
145
146 Compiled procedures, also known as @dfn{programs}, respond all
147 procedures that operate on procedures. In addition, there are a few
148 more accessors for low-level details on programs.
149
150 Most people won't need to use the routines described in this section,
151 but it's good to have them documented. You'll have to include the
152 appropriate module first, though:
153
154 @example
155 (use-modules (system vm program))
156 @end example
157
158 @deffn {Scheme Procedure} program? obj
159 @deffnx {C Function} scm_program_p (obj)
160 Returns @code{#t} iff @var{obj} is a compiled procedure.
161 @end deffn
162
163 @deffn {Scheme Procedure} program-objcode program
164 @deffnx {C Function} scm_program_objcode (program)
165 Returns the object code associated with this program. @xref{Bytecode
166 and Objcode}, for more information.
167 @end deffn
168
169 @deffn {Scheme Procedure} program-objects program
170 @deffnx {C Function} scm_program_objects (program)
171 Returns the ``object table'' associated with this program, as a
172 vector. @xref{VM Programs}, for more information.
173 @end deffn
174
175 @deffn {Scheme Procedure} program-module program
176 @deffnx {C Function} scm_program_module (program)
177 Returns the module that was current when this program was created. Can
178 return @code{#f} if the compiler could determine that this information
179 was unnecessary.
180 @end deffn
181
182 @deffn {Scheme Procedure} program-free-variables program
183 @deffnx {C Function} scm_program_free_variables (program)
184 Returns the set of free variables that this program captures in its
185 closure, as a vector. If a closure is code with data, you can get the
186 code from @code{program-objcode}, and the data via
187 @code{program-free-variables}.
188
189 Some of the values captured are actually in variable ``boxes''.
190 @xref{Variables and the VM}, for more information.
191
192 Users must not modify the returned value unless they think they're
193 really clever.
194 @end deffn
195
196 @deffn {Scheme Procedure} program-meta program
197 @deffnx {C Function} scm_program_meta (program)
198 Return the metadata thunk of @var{program}, or @code{#f} if it has no
199 metadata.
200
201 When called, a metadata thunk returns a list of the following form:
202 @code{(@var{bindings} @var{sources} @var{arities} . @var{properties})}. The format
203 of each of these elements is discussed below.
204 @end deffn
205
206 @deffn {Scheme Procedure} program-bindings program
207 @deffnx {Scheme Procedure} make-binding name boxed? index start end
208 @deffnx {Scheme Procedure} binding:name binding
209 @deffnx {Scheme Procedure} binding:boxed? binding
210 @deffnx {Scheme Procedure} binding:index binding
211 @deffnx {Scheme Procedure} binding:start binding
212 @deffnx {Scheme Procedure} binding:end binding
213 Bindings annotations for programs, along with their accessors.
214
215 Bindings declare names and liveness extents for block-local variables.
216 The best way to see what these are is to play around with them at a
217 REPL. @xref{VM Concepts}, for more information.
218
219 Note that bindings information is stored in a program as part of its
220 metadata thunk, so including it in the generated object code does not
221 impose a runtime performance penalty.
222 @end deffn
223
224 @deffn {Scheme Procedure} program-sources program
225 @deffnx {Scheme Procedure} source:addr source
226 @deffnx {Scheme Procedure} source:line source
227 @deffnx {Scheme Procedure} source:column source
228 @deffnx {Scheme Procedure} source:file source
229 Source location annotations for programs, along with their accessors.
230
231 Source location information propagates through the compiler and ends
232 up being serialized to the program's metadata. This information is
233 keyed by the offset of the instruction pointer within the object code
234 of the program. Specifically, it is keyed on the @code{ip} @emph{just
235 following} an instruction, so that backtraces can find the source
236 location of a call that is in progress.
237 @end deffn
238
239 @deffn {Scheme Procedure} program-arities program
240 @deffnx {C Function} scm_program_arities (program)
241 @deffnx {Scheme Procedure} program-arity program ip
242 @deffnx {Scheme Procedure} arity:start arity
243 @deffnx {Scheme Procedure} arity:end arity
244 @deffnx {Scheme Procedure} arity:nreq arity
245 @deffnx {Scheme Procedure} arity:nopt arity
246 @deffnx {Scheme Procedure} arity:rest? arity
247 @deffnx {Scheme Procedure} arity:kw arity
248 @deffnx {Scheme Procedure} arity:allow-other-keys? arity
249 Accessors for a representation of the ``arity'' of a program.
250
251 The normal case is that a procedure has one arity. For example,
252 @code{(lambda (x) x)}, takes one required argument, and that's it. One
253 could access that number of required arguments via @code{(arity:nreq
254 (program-arities (lambda (x) x)))}. Similarly, @code{arity:nopt} gets
255 the number of optional arguments, and @code{arity:rest?} returns a true
256 value if the procedure has a rest arg.
257
258 @code{arity:kw} returns a list of @code{(@var{kw} . @var{idx})} pairs,
259 if the procedure has keyword arguments. The @var{idx} refers to the
260 @var{idx}th local variable; @xref{Variables and the VM}, for more
261 information. Finally @code{arity:allow-other-keys?} returns a true
262 value if other keys are allowed. @xref{Optional Arguments}, for more
263 information.
264
265 So what about @code{arity:start} and @code{arity:end}, then? They
266 return the range of bytes in the program's bytecode for which a given
267 arity is valid. You see, a procedure can actually have more than one
268 arity. The question, ``what is a procedure's arity'' only really makes
269 sense at certain points in the program, delimited by these
270 @code{arity:start} and @code{arity:end} values.
271 @end deffn
272
273 @deffn {Scheme Procedure} program-arguments-alist program [ip]
274 Return an association list describing the arguments that @var{program} accepts, or
275 @code{#f} if the information cannot be obtained.
276
277 For example:
278 @example
279 (program-arguments-alist
280 (lambda* (a b #:optional c #:key (d 1) #:rest e)
281 #t)) @result{}
282 ((required . (a b))
283 (optional . (c))
284 (keyword . ((#:d . 4)))
285 (allow-other-keys? . #f)
286 (rest . d))
287 @end example
288
289 The alist keys that are currently defined are `required', `optional',
290 `keyword', `allow-other-keys?', and `rest'.
291
292 @deffnx {Scheme Procedure} program-lambda-list program [ip]
293 Accessors for a representation of the arguments of a program, with both
294 names and types (ie. either required, optional or keywords)
295
296 @code{program-arguments-alist} returns this information in the form of
297 an association list while @code{program-lambda-list} returns the same
298 information in a form similar to a lambda definition.
299 @end deffn
300
301 @node Optional Arguments
302 @subsection Optional Arguments
303
304 Scheme procedures, as defined in R5RS, can either handle a fixed number
305 of actual arguments, or a fixed number of actual arguments followed by
306 arbitrarily many additional arguments. Writing procedures of variable
307 arity can be useful, but unfortunately, the syntactic means for handling
308 argument lists of varying length is a bit inconvenient. It is possible
309 to give names to the fixed number of arguments, but the remaining
310 (optional) arguments can be only referenced as a list of values
311 (@pxref{Lambda}).
312
313 For this reason, Guile provides an extension to @code{lambda},
314 @code{lambda*}, which allows the user to define procedures with
315 optional and keyword arguments. In addition, Guile's virtual machine
316 has low-level support for optional and keyword argument dispatch.
317 Calls to procedures with optional and keyword arguments can be made
318 cheaply, without allocating a rest list.
319
320 @menu
321 * lambda* and define*:: Creating advanced argument handling procedures.
322 * ice-9 optargs:: (ice-9 optargs) provides some utilities.
323 @end menu
324
325
326 @node lambda* and define*
327 @subsubsection lambda* and define*.
328
329 @code{lambda*} is like @code{lambda}, except with some extensions to
330 allow optional and keyword arguments.
331
332 @deffn {library syntax} lambda* ([var@dots{}] @* [#:optional vardef@dots{}] @* [#:key vardef@dots{} [#:allow-other-keys]] @* [#:rest var | . var]) @* body
333 @sp 1
334 Create a procedure which takes optional and/or keyword arguments
335 specified with @code{#:optional} and @code{#:key}. For example,
336
337 @lisp
338 (lambda* (a b #:optional c d . e) '())
339 @end lisp
340
341 is a procedure with fixed arguments @var{a} and @var{b}, optional
342 arguments @var{c} and @var{d}, and rest argument @var{e}. If the
343 optional arguments are omitted in a call, the variables for them are
344 bound to @code{#f}.
345
346 @fnindex define*
347 Likewise, @code{define*} is syntactic sugar for defining procedures
348 using @code{lambda*}.
349
350 @code{lambda*} can also make procedures with keyword arguments. For
351 example, a procedure defined like this:
352
353 @lisp
354 (define* (sir-yes-sir #:key action how-high)
355 (list action how-high))
356 @end lisp
357
358 can be called as @code{(sir-yes-sir #:action 'jump)},
359 @code{(sir-yes-sir #:how-high 13)}, @code{(sir-yes-sir #:action
360 'lay-down #:how-high 0)}, or just @code{(sir-yes-sir)}. Whichever
361 arguments are given as keywords are bound to values (and those not
362 given are @code{#f}).
363
364 Optional and keyword arguments can also have default values to take
365 when not present in a call, by giving a two-element list of variable
366 name and expression. For example in
367
368 @lisp
369 (define* (frob foo #:optional (bar 42) #:key (baz 73))
370 (list foo bar baz))
371 @end lisp
372
373 @var{foo} is a fixed argument, @var{bar} is an optional argument with
374 default value 42, and baz is a keyword argument with default value 73.
375 Default value expressions are not evaluated unless they are needed,
376 and until the procedure is called.
377
378 Normally it's an error if a call has keywords other than those
379 specified by @code{#:key}, but adding @code{#:allow-other-keys} to the
380 definition (after the keyword argument declarations) will ignore
381 unknown keywords.
382
383 If a call has a keyword given twice, the last value is used. For
384 example,
385
386 @lisp
387 (define* (flips #:key (heads 0) (tails 0))
388 (display (list heads tails)))
389
390 (flips #:heads 37 #:tails 42 #:heads 99)
391 @print{} (99 42)
392 @end lisp
393
394 @code{#:rest} is a synonym for the dotted syntax rest argument. The
395 argument lists @code{(a . b)} and @code{(a #:rest b)} are equivalent
396 in all respects. This is provided for more similarity to DSSSL,
397 MIT-Scheme and Kawa among others, as well as for refugees from other
398 Lisp dialects.
399
400 When @code{#:key} is used together with a rest argument, the keyword
401 parameters in a call all remain in the rest list. This is the same as
402 Common Lisp. For example,
403
404 @lisp
405 ((lambda* (#:key (x 0) #:allow-other-keys #:rest r)
406 (display r))
407 #:x 123 #:y 456)
408 @print{} (#:x 123 #:y 456)
409 @end lisp
410
411 @code{#:optional} and @code{#:key} establish their bindings
412 successively, from left to right. This means default expressions can
413 refer back to prior parameters, for example
414
415 @lisp
416 (lambda* (start #:optional (end (+ 10 start)))
417 (do ((i start (1+ i)))
418 ((> i end))
419 (display i)))
420 @end lisp
421
422 The exception to this left-to-right scoping rule is the rest argument.
423 If there is a rest argument, it is bound after the optional arguments,
424 but before the keyword arguments.
425 @end deffn
426
427
428 @node ice-9 optargs
429 @subsubsection (ice-9 optargs)
430
431 Before Guile 2.0, @code{lambda*} and @code{define*} were implemented
432 using macros that processed rest list arguments. This was not optimal,
433 as calling procedures with optional arguments had to allocate rest
434 lists at every procedure invocation. Guile 2.0 improved this
435 situation by bringing optional and keyword arguments into Guile's
436 core.
437
438 However there are occasions in which you have a list and want to parse
439 it for optional or keyword arguments. Guile's @code{(ice-9 optargs)}
440 provides some macros to help with that task.
441
442 The syntax @code{let-optional} and @code{let-optional*} are for
443 destructuring rest argument lists and giving names to the various list
444 elements. @code{let-optional} binds all variables simultaneously, while
445 @code{let-optional*} binds them sequentially, consistent with @code{let}
446 and @code{let*} (@pxref{Local Bindings}).
447
448 @deffn {library syntax} let-optional rest-arg (binding @dots{}) body1 body2 @dots{}
449 @deffnx {library syntax} let-optional* rest-arg (binding @dots{}) body1 body2 @dots{}
450 These two macros give you an optional argument interface that is very
451 @dfn{Schemey} and introduces no fancy syntax. They are compatible with
452 the scsh macros of the same name, but are slightly extended. Each of
453 @var{binding} may be of one of the forms @var{var} or @code{(@var{var}
454 @var{default-value})}. @var{rest-arg} should be the rest-argument of the
455 procedures these are used from. The items in @var{rest-arg} are
456 sequentially bound to the variable names are given. When @var{rest-arg}
457 runs out, the remaining vars are bound either to the default values or
458 @code{#f} if no default value was specified. @var{rest-arg} remains
459 bound to whatever may have been left of @var{rest-arg}.
460
461 After binding the variables, the expressions @var{body1} @var{body2} @dots{}
462 are evaluated in order.
463 @end deffn
464
465 Similarly, @code{let-keywords} and @code{let-keywords*} extract values
466 from keyword style argument lists, binding local variables to those
467 values or to defaults.
468
469 @deffn {library syntax} let-keywords args allow-other-keys? (binding @dots{}) body1 body2 @dots{}
470 @deffnx {library syntax} let-keywords* args allow-other-keys? (binding @dots{}) body1 body2 @dots{}
471 @var{args} is evaluated and should give a list of the form
472 @code{(#:keyword1 value1 #:keyword2 value2 @dots{})}. The
473 @var{binding}s are variables and default expressions, with the variables
474 to be set (by name) from the keyword values. The @var{body1}
475 @var{body2} @dots{} forms are then evaluated and the last is the
476 result. An example will make the syntax clearest,
477
478 @example
479 (define args '(#:xyzzy "hello" #:foo "world"))
480
481 (let-keywords args #t
482 ((foo "default for foo")
483 (bar (string-append "default" "for" "bar")))
484 (display foo)
485 (display ", ")
486 (display bar))
487 @print{} world, defaultforbar
488 @end example
489
490 The binding for @code{foo} comes from the @code{#:foo} keyword in
491 @code{args}. But the binding for @code{bar} is the default in the
492 @code{let-keywords}, since there's no @code{#:bar} in the args.
493
494 @var{allow-other-keys?} is evaluated and controls whether unknown
495 keywords are allowed in the @var{args} list. When true other keys are
496 ignored (such as @code{#:xyzzy} in the example), when @code{#f} an
497 error is thrown for anything unknown.
498 @end deffn
499
500 @code{(ice-9 optargs)} also provides some more @code{define*} sugar,
501 which is not so useful with modern Guile coding, but still supported:
502 @code{define*-public} is the @code{lambda*} version of
503 @code{define-public}; @code{defmacro*} and @code{defmacro*-public}
504 exist for defining macros with the improved argument list handling
505 possibilities. The @code{-public} versions not only define the
506 procedures/macros, but also export them from the current module.
507
508 @deffn {library syntax} define*-public formals body1 body2 @dots{}
509 Like a mix of @code{define*} and @code{define-public}.
510 @end deffn
511
512 @deffn {library syntax} defmacro* name formals body1 body2 @dots{}
513 @deffnx {library syntax} defmacro*-public name formals body1 body2 @dots{}
514 These are just like @code{defmacro} and @code{defmacro-public} except that they
515 take @code{lambda*}-style extended parameter lists, where @code{#:optional},
516 @code{#:key}, @code{#:allow-other-keys} and @code{#:rest} are allowed with the usual
517 semantics. Here is an example of a macro with an optional argument:
518
519 @lisp
520 (defmacro* transmogrify (a #:optional b)
521 (a 1))
522 @end lisp
523 @end deffn
524
525 @node Case-lambda
526 @subsection Case-lambda
527 @cindex SRFI-16
528 @cindex variable arity
529 @cindex arity, variable
530
531 R5RS's rest arguments are indeed useful and very general, but they
532 often aren't the most appropriate or efficient means to get the job
533 done. For example, @code{lambda*} is a much better solution to the
534 optional argument problem than @code{lambda} with rest arguments.
535
536 @fnindex case-lambda
537 Likewise, @code{case-lambda} works well for when you want one
538 procedure to do double duty (or triple, or ...), without the penalty
539 of consing a rest list.
540
541 For example:
542
543 @lisp
544 (define (make-accum n)
545 (case-lambda
546 (() n)
547 ((m) (set! n (+ n m)) n)))
548
549 (define a (make-accum 20))
550 (a) @result{} 20
551 (a 10) @result{} 30
552 (a) @result{} 30
553 @end lisp
554
555 The value returned by a @code{case-lambda} form is a procedure which
556 matches the number of actual arguments against the formals in the
557 various clauses, in order. The first matching clause is selected, the
558 corresponding values from the actual parameter list are bound to the
559 variable names in the clauses and the body of the clause is evaluated.
560 If no clause matches, an error is signalled.
561
562 The syntax of the @code{case-lambda} form is defined in the following
563 EBNF grammar. @dfn{Formals} means a formal argument list just like
564 with @code{lambda} (@pxref{Lambda}).
565
566 @example
567 @group
568 <case-lambda>
569 --> (case-lambda <case-lambda-clause>)
570 <case-lambda-clause>
571 --> (<formals> <definition-or-command>*)
572 <formals>
573 --> (<identifier>*)
574 | (<identifier>* . <identifier>)
575 | <identifier>
576 @end group
577 @end example
578
579 Rest lists can be useful with @code{case-lambda}:
580
581 @lisp
582 (define plus
583 (case-lambda
584 (() 0)
585 ((a) a)
586 ((a b) (+ a b))
587 ((a b . rest) (apply plus (+ a b) rest))))
588 (plus 1 2 3) @result{} 6
589 @end lisp
590
591 @fnindex case-lambda*
592 Also, for completeness. Guile defines @code{case-lambda*} as well,
593 which is like @code{case-lambda}, except with @code{lambda*} clauses.
594 A @code{case-lambda*} clause matches if the arguments fill the
595 required arguments, but are not too many for the optional and/or rest
596 arguments.
597
598 Keyword arguments are possible with @code{case-lambda*}, but they do
599 not contribute to the ``matching'' behavior. That is to say,
600 @code{case-lambda*} matches only on required, optional, and rest
601 arguments, and on the predicate; keyword arguments may be present but
602 do not contribute to the ``success'' of a match. In fact a bad keyword
603 argument list may cause an error to be raised.
604
605 @node Higher-Order Functions
606 @subsection Higher-Order Functions
607
608 @cindex higher-order functions
609
610 As a functional programming language, Scheme allows the definition of
611 @dfn{higher-order functions}, i.e., functions that take functions as
612 arguments and/or return functions. Utilities to derive procedures from
613 other procedures are provided and described below.
614
615 @deffn {Scheme Procedure} const value
616 Return a procedure that accepts any number of arguments and returns
617 @var{value}.
618
619 @lisp
620 (procedure? (const 3)) @result{} #t
621 ((const 'hello)) @result{} hello
622 ((const 'hello) 'world) @result{} hello
623 @end lisp
624 @end deffn
625
626 @deffn {Scheme Procedure} negate proc
627 Return a procedure with the same arity as @var{proc} that returns the
628 @code{not} of @var{proc}'s result.
629
630 @lisp
631 (procedure? (negate number?)) @result{} #t
632 ((negate odd?) 2) @result{} #t
633 ((negate real?) 'dream) @result{} #t
634 ((negate string-prefix?) "GNU" "GNU Guile")
635 @result{} #f
636 (filter (negate number?) '(a 2 "b"))
637 @result{} (a "b")
638 @end lisp
639 @end deffn
640
641 @deffn {Scheme Procedure} compose proc1 proc2 @dots{}
642 Compose @var{proc1} with the procedures @var{proc2} @dots{} such that
643 the last @var{proc} argument is applied first and @var{proc1} last, and
644 return the resulting procedure. The given procedures must have
645 compatible arity.
646
647 @lisp
648 (procedure? (compose 1+ 1-)) @result{} #t
649 ((compose sqrt 1+ 1+) 2) @result{} 2.0
650 ((compose 1+ sqrt) 3) @result{} 2.73205080756888
651 (eq? (compose 1+) 1+) @result{} #t
652
653 ((compose zip unzip2) '((1 2) (a b)))
654 @result{} ((1 2) (a b))
655 @end lisp
656 @end deffn
657
658 @deffn {Scheme Procedure} identity x
659 Return X.
660 @end deffn
661
662 @node Procedure Properties
663 @subsection Procedure Properties and Meta-information
664
665 In addition to the information that is strictly necessary to run,
666 procedures may have other associated information. For example, the
667 name of a procedure is information not for the procedure, but about
668 the procedure. This meta-information can be accessed via the procedure
669 properties interface.
670
671 The first group of procedures in this meta-interface are predicates to
672 test whether a Scheme object is a procedure, or a special procedure,
673 respectively. @code{procedure?} is the most general predicates, it
674 returns @code{#t} for any kind of procedure.
675
676 @rnindex procedure?
677 @deffn {Scheme Procedure} procedure? obj
678 @deffnx {C Function} scm_procedure_p (obj)
679 Return @code{#t} if @var{obj} is a procedure.
680 @end deffn
681
682 @deffn {Scheme Procedure} thunk? obj
683 @deffnx {C Function} scm_thunk_p (obj)
684 Return @code{#t} if @var{obj} is a thunk---a procedure that does
685 not accept arguments.
686 @end deffn
687
688 @cindex procedure properties
689 Procedure properties are general properties associated with
690 procedures. These can be the name of a procedure or other relevant
691 information, such as debug hints.
692
693 @deffn {Scheme Procedure} procedure-name proc
694 @deffnx {C Function} scm_procedure_name (proc)
695 Return the name of the procedure @var{proc}
696 @end deffn
697
698 @deffn {Scheme Procedure} procedure-source proc
699 @deffnx {C Function} scm_procedure_source (proc)
700 Return the source of the procedure @var{proc}. Returns @code{#f} if
701 the source code is not available.
702 @end deffn
703
704 @deffn {Scheme Procedure} procedure-properties proc
705 @deffnx {C Function} scm_procedure_properties (proc)
706 Return the properties associated with @var{proc}, as an association
707 list.
708 @end deffn
709
710 @deffn {Scheme Procedure} procedure-property proc key
711 @deffnx {C Function} scm_procedure_property (proc, key)
712 Return the property of @var{proc} with name @var{key}.
713 @end deffn
714
715 @deffn {Scheme Procedure} set-procedure-properties! proc alist
716 @deffnx {C Function} scm_set_procedure_properties_x (proc, alist)
717 Set @var{proc}'s property list to @var{alist}.
718 @end deffn
719
720 @deffn {Scheme Procedure} set-procedure-property! proc key value
721 @deffnx {C Function} scm_set_procedure_property_x (proc, key, value)
722 In @var{proc}'s property list, set the property named @var{key} to
723 @var{value}.
724 @end deffn
725
726 @cindex procedure documentation
727 Documentation for a procedure can be accessed with the procedure
728 @code{procedure-documentation}.
729
730 @deffn {Scheme Procedure} procedure-documentation proc
731 @deffnx {C Function} scm_procedure_documentation (proc)
732 Return the documentation string associated with @code{proc}. By
733 convention, if a procedure contains more than one expression and the
734 first expression is a string constant, that string is assumed to contain
735 documentation for that procedure.
736 @end deffn
737
738
739 @node Procedures with Setters
740 @subsection Procedures with Setters
741
742 @c FIXME::martin: Review me!
743
744 @c FIXME::martin: Document `operator struct'.
745
746 @cindex procedure with setter
747 @cindex setter
748 A @dfn{procedure with setter} is a special kind of procedure which
749 normally behaves like any accessor procedure, that is a procedure which
750 accesses a data structure. The difference is that this kind of
751 procedure has a so-called @dfn{setter} attached, which is a procedure
752 for storing something into a data structure.
753
754 Procedures with setters are treated specially when the procedure appears
755 in the special form @code{set!} (REFFIXME). How it works is best shown
756 by example.
757
758 Suppose we have a procedure called @code{foo-ref}, which accepts two
759 arguments, a value of type @code{foo} and an integer. The procedure
760 returns the value stored at the given index in the @code{foo} object.
761 Let @code{f} be a variable containing such a @code{foo} data
762 structure.@footnote{Working definitions would be:
763 @lisp
764 (define foo-ref vector-ref)
765 (define foo-set! vector-set!)
766 (define f (make-vector 2 #f))
767 @end lisp
768 }
769
770 @lisp
771 (foo-ref f 0) @result{} bar
772 (foo-ref f 1) @result{} braz
773 @end lisp
774
775 Also suppose that a corresponding setter procedure called
776 @code{foo-set!} does exist.
777
778 @lisp
779 (foo-set! f 0 'bla)
780 (foo-ref f 0) @result{} bla
781 @end lisp
782
783 Now we could create a new procedure called @code{foo}, which is a
784 procedure with setter, by calling @code{make-procedure-with-setter} with
785 the accessor and setter procedures @code{foo-ref} and @code{foo-set!}.
786 Let us call this new procedure @code{foo}.
787
788 @lisp
789 (define foo (make-procedure-with-setter foo-ref foo-set!))
790 @end lisp
791
792 @code{foo} can from now an be used to either read from the data
793 structure stored in @code{f}, or to write into the structure.
794
795 @lisp
796 (set! (foo f 0) 'dum)
797 (foo f 0) @result{} dum
798 @end lisp
799
800 @deffn {Scheme Procedure} make-procedure-with-setter procedure setter
801 @deffnx {C Function} scm_make_procedure_with_setter (procedure, setter)
802 Create a new procedure which behaves like @var{procedure}, but
803 with the associated setter @var{setter}.
804 @end deffn
805
806 @deffn {Scheme Procedure} procedure-with-setter? obj
807 @deffnx {C Function} scm_procedure_with_setter_p (obj)
808 Return @code{#t} if @var{obj} is a procedure with an
809 associated setter procedure.
810 @end deffn
811
812 @deffn {Scheme Procedure} procedure proc
813 @deffnx {C Function} scm_procedure (proc)
814 Return the procedure of @var{proc}, which must be an
815 applicable struct.
816 @end deffn
817
818 @deffn {Scheme Procedure} setter proc
819 Return the setter of @var{proc}, which must be either a procedure with
820 setter or an operator struct.
821 @end deffn
822
823 @node Inlinable Procedures
824 @subsection Inlinable Procedures
825
826 @cindex inlining
827 @cindex procedure inlining
828 You can define an @dfn{inlinable procedure} by using
829 @code{define-inlinable} instead of @code{define}. An inlinable
830 procedure behaves the same as a regular procedure, but direct calls will
831 result in the procedure body being inlined into the caller.
832
833 @cindex partial evaluator
834 Bear in mind that starting from version 2.0.3, Guile has a partial
835 evaluator that can inline the body of inner procedures when deemed
836 appropriate:
837
838 @example
839 scheme@@(guile-user)> ,optimize (define (foo x)
840 (define (bar) (+ x 3))
841 (* (bar) 2))
842 $1 = (define foo
843 (lambda (#@{x 94@}#) (* (+ #@{x 94@}# 3) 2)))
844 @end example
845
846 @noindent
847 The partial evaluator does not inline top-level bindings, though, so
848 this is a situation where you may find it interesting to use
849 @code{define-inlinable}.
850
851 Procedures defined with @code{define-inlinable} are @emph{always}
852 inlined, at all direct call sites. This eliminates function call
853 overhead at the expense of an increase in code size. Additionally, the
854 caller will not transparently use the new definition if the inline
855 procedure is redefined. It is not possible to trace an inlined
856 procedures or install a breakpoint in it (@pxref{Traps}). For these
857 reasons, you should not make a procedure inlinable unless it
858 demonstrably improves performance in a crucial way.
859
860 In general, only small procedures should be considered for inlining, as
861 making large procedures inlinable will probably result in an increase in
862 code size. Additionally, the elimination of the call overhead rarely
863 matters for large procedures.
864
865 @deffn {Scheme Syntax} define-inlinable (name parameter @dots{}) body1 body2 @dots{}
866 Define @var{name} as a procedure with parameters @var{parameter}s and
867 bodies @var{body1}, @var{body2}, @enddots{}.
868 @end deffn
869
870 @c Local Variables:
871 @c TeX-master: "guile.texi"
872 @c End: