Document `and=>'.
[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} if @var{obj} is a compiled procedure, or @code{#f}
161 otherwise.
162 @end deffn
163
164 @deffn {Scheme Procedure} program-objcode program
165 @deffnx {C Function} scm_program_objcode (program)
166 Returns the object code associated with this program. @xref{Bytecode
167 and Objcode}, for more information.
168 @end deffn
169
170 @deffn {Scheme Procedure} program-objects program
171 @deffnx {C Function} scm_program_objects (program)
172 Returns the ``object table'' associated with this program, as a
173 vector. @xref{VM Programs}, for more information.
174 @end deffn
175
176 @deffn {Scheme Procedure} program-module program
177 @deffnx {C Function} scm_program_module (program)
178 Returns the module that was current when this program was created. Can
179 return @code{#f} if the compiler could determine that this information
180 was unnecessary.
181 @end deffn
182
183 @deffn {Scheme Procedure} program-free-variables program
184 @deffnx {C Function} scm_program_free_variables (program)
185 Returns the set of free variables that this program captures in its
186 closure, as a vector. If a closure is code with data, you can get the
187 code from @code{program-objcode}, and the data via
188 @code{program-free-variables}.
189
190 Some of the values captured are actually in variable ``boxes''.
191 @xref{Variables and the VM}, for more information.
192
193 Users must not modify the returned value unless they think they're
194 really clever.
195 @end deffn
196
197 @deffn {Scheme Procedure} program-meta program
198 @deffnx {C Function} scm_program_meta (program)
199 Return the metadata thunk of @var{program}, or @code{#f} if it has no
200 metadata.
201
202 When called, a metadata thunk returns a list of the following form:
203 @code{(@var{bindings} @var{sources} @var{arities} . @var{properties})}. The format
204 of each of these elements is discussed below.
205 @end deffn
206
207 @deffn {Scheme Procedure} program-bindings program
208 @deffnx {Scheme Procedure} make-binding name boxed? index start end
209 @deffnx {Scheme Procedure} binding:name binding
210 @deffnx {Scheme Procedure} binding:boxed? binding
211 @deffnx {Scheme Procedure} binding:index binding
212 @deffnx {Scheme Procedure} binding:start binding
213 @deffnx {Scheme Procedure} binding:end binding
214 Bindings annotations for programs, along with their accessors.
215
216 Bindings declare names and liveness extents for block-local variables.
217 The best way to see what these are is to play around with them at a
218 REPL. @xref{VM Concepts}, for more information.
219
220 Note that bindings information is stored in a program as part of its
221 metadata thunk, so including it in the generated object code does not
222 impose a runtime performance penalty.
223 @end deffn
224
225 @deffn {Scheme Procedure} program-sources program
226 @deffnx {Scheme Procedure} source:addr source
227 @deffnx {Scheme Procedure} source:line source
228 @deffnx {Scheme Procedure} source:column source
229 @deffnx {Scheme Procedure} source:file source
230 Source location annotations for programs, along with their accessors.
231
232 Source location information propagates through the compiler and ends
233 up being serialized to the program's metadata. This information is
234 keyed by the offset of the instruction pointer within the object code
235 of the program. Specifically, it is keyed on the @code{ip} @emph{just
236 following} an instruction, so that backtraces can find the source
237 location of a call that is in progress.
238 @end deffn
239
240 @deffn {Scheme Procedure} program-arities program
241 @deffnx {C Function} scm_program_arities (program)
242 @deffnx {Scheme Procedure} program-arity program ip
243 @deffnx {Scheme Procedure} arity:start arity
244 @deffnx {Scheme Procedure} arity:end arity
245 @deffnx {Scheme Procedure} arity:nreq arity
246 @deffnx {Scheme Procedure} arity:nopt arity
247 @deffnx {Scheme Procedure} arity:rest? arity
248 @deffnx {Scheme Procedure} arity:kw arity
249 @deffnx {Scheme Procedure} arity:allow-other-keys? arity
250 Accessors for a representation of the ``arity'' of a program.
251
252 The normal case is that a procedure has one arity. For example,
253 @code{(lambda (x) x)}, takes one required argument, and that's it. One
254 could access that number of required arguments via @code{(arity:nreq
255 (program-arities (lambda (x) x)))}. Similarly, @code{arity:nopt} gets
256 the number of optional arguments, and @code{arity:rest?} returns a true
257 value if the procedure has a rest arg.
258
259 @code{arity:kw} returns a list of @code{(@var{kw} . @var{idx})} pairs,
260 if the procedure has keyword arguments. The @var{idx} refers to the
261 @var{idx}th local variable; @xref{Variables and the VM}, for more
262 information. Finally @code{arity:allow-other-keys?} returns a true
263 value if other keys are allowed. @xref{Optional Arguments}, for more
264 information.
265
266 So what about @code{arity:start} and @code{arity:end}, then? They
267 return the range of bytes in the program's bytecode for which a given
268 arity is valid. You see, a procedure can actually have more than one
269 arity. The question, ``what is a procedure's arity'' only really makes
270 sense at certain points in the program, delimited by these
271 @code{arity:start} and @code{arity:end} values.
272 @end deffn
273
274 @deffn {Scheme Procedure} program-arguments-alist program [ip]
275 Return an association list describing the arguments that @var{program} accepts, or
276 @code{#f} if the information cannot be obtained.
277
278 The alist keys that are currently defined are `required', `optional',
279 `keyword', `allow-other-keys?', and `rest'. For example:
280
281 @example
282 (program-arguments-alist
283 (lambda* (a b #:optional c #:key (d 1) #:rest e)
284 #t)) @result{}
285 ((required . (a b))
286 (optional . (c))
287 (keyword . ((#:d . 4)))
288 (allow-other-keys? . #f)
289 (rest . d))
290 @end example
291 @end deffn
292
293 @deffn {Scheme Procedure} program-lambda-list program [ip]
294 Return a representation of the arguments of @var{program} as a lambda
295 list, or @code{#f} if this information is not available.
296
297 For example:
298
299 @example
300 (program-lambda-alist
301 (lambda* (a b #:optional c #:key (d 1) #:rest e)
302 #t)) @result{}
303 @end example
304 @end deffn
305
306 @node Optional Arguments
307 @subsection Optional Arguments
308
309 Scheme procedures, as defined in R5RS, can either handle a fixed number
310 of actual arguments, or a fixed number of actual arguments followed by
311 arbitrarily many additional arguments. Writing procedures of variable
312 arity can be useful, but unfortunately, the syntactic means for handling
313 argument lists of varying length is a bit inconvenient. It is possible
314 to give names to the fixed number of arguments, but the remaining
315 (optional) arguments can be only referenced as a list of values
316 (@pxref{Lambda}).
317
318 For this reason, Guile provides an extension to @code{lambda},
319 @code{lambda*}, which allows the user to define procedures with
320 optional and keyword arguments. In addition, Guile's virtual machine
321 has low-level support for optional and keyword argument dispatch.
322 Calls to procedures with optional and keyword arguments can be made
323 cheaply, without allocating a rest list.
324
325 @menu
326 * lambda* and define*:: Creating advanced argument handling procedures.
327 * ice-9 optargs:: (ice-9 optargs) provides some utilities.
328 @end menu
329
330
331 @node lambda* and define*
332 @subsubsection lambda* and define*.
333
334 @code{lambda*} is like @code{lambda}, except with some extensions to
335 allow optional and keyword arguments.
336
337 @deffn {library syntax} lambda* ([var@dots{}] @* @
338 [#:optional vardef@dots{}] @* @
339 [#:key vardef@dots{} [#:allow-other-keys]] @* @
340 [#:rest var | . var]) @* @
341 body1 body2 @dots{}
342 @sp 1
343 Create a procedure which takes optional and/or keyword arguments
344 specified with @code{#:optional} and @code{#:key}. For example,
345
346 @lisp
347 (lambda* (a b #:optional c d . e) '())
348 @end lisp
349
350 is a procedure with fixed arguments @var{a} and @var{b}, optional
351 arguments @var{c} and @var{d}, and rest argument @var{e}. If the
352 optional arguments are omitted in a call, the variables for them are
353 bound to @code{#f}.
354
355 @fnindex define*
356 Likewise, @code{define*} is syntactic sugar for defining procedures
357 using @code{lambda*}.
358
359 @code{lambda*} can also make procedures with keyword arguments. For
360 example, a procedure defined like this:
361
362 @lisp
363 (define* (sir-yes-sir #:key action how-high)
364 (list action how-high))
365 @end lisp
366
367 can be called as @code{(sir-yes-sir #:action 'jump)},
368 @code{(sir-yes-sir #:how-high 13)}, @code{(sir-yes-sir #:action
369 'lay-down #:how-high 0)}, or just @code{(sir-yes-sir)}. Whichever
370 arguments are given as keywords are bound to values (and those not
371 given are @code{#f}).
372
373 Optional and keyword arguments can also have default values to take
374 when not present in a call, by giving a two-element list of variable
375 name and expression. For example in
376
377 @lisp
378 (define* (frob foo #:optional (bar 42) #:key (baz 73))
379 (list foo bar baz))
380 @end lisp
381
382 @var{foo} is a fixed argument, @var{bar} is an optional argument with
383 default value 42, and baz is a keyword argument with default value 73.
384 Default value expressions are not evaluated unless they are needed,
385 and until the procedure is called.
386
387 Normally it's an error if a call has keywords other than those
388 specified by @code{#:key}, but adding @code{#:allow-other-keys} to the
389 definition (after the keyword argument declarations) will ignore
390 unknown keywords.
391
392 If a call has a keyword given twice, the last value is used. For
393 example,
394
395 @lisp
396 (define* (flips #:key (heads 0) (tails 0))
397 (display (list heads tails)))
398
399 (flips #:heads 37 #:tails 42 #:heads 99)
400 @print{} (99 42)
401 @end lisp
402
403 @code{#:rest} is a synonym for the dotted syntax rest argument. The
404 argument lists @code{(a . b)} and @code{(a #:rest b)} are equivalent
405 in all respects. This is provided for more similarity to DSSSL,
406 MIT-Scheme and Kawa among others, as well as for refugees from other
407 Lisp dialects.
408
409 When @code{#:key} is used together with a rest argument, the keyword
410 parameters in a call all remain in the rest list. This is the same as
411 Common Lisp. For example,
412
413 @lisp
414 ((lambda* (#:key (x 0) #:allow-other-keys #:rest r)
415 (display r))
416 #:x 123 #:y 456)
417 @print{} (#:x 123 #:y 456)
418 @end lisp
419
420 @code{#:optional} and @code{#:key} establish their bindings
421 successively, from left to right. This means default expressions can
422 refer back to prior parameters, for example
423
424 @lisp
425 (lambda* (start #:optional (end (+ 10 start)))
426 (do ((i start (1+ i)))
427 ((> i end))
428 (display i)))
429 @end lisp
430
431 The exception to this left-to-right scoping rule is the rest argument.
432 If there is a rest argument, it is bound after the optional arguments,
433 but before the keyword arguments.
434 @end deffn
435
436
437 @node ice-9 optargs
438 @subsubsection (ice-9 optargs)
439
440 Before Guile 2.0, @code{lambda*} and @code{define*} were implemented
441 using macros that processed rest list arguments. This was not optimal,
442 as calling procedures with optional arguments had to allocate rest
443 lists at every procedure invocation. Guile 2.0 improved this
444 situation by bringing optional and keyword arguments into Guile's
445 core.
446
447 However there are occasions in which you have a list and want to parse
448 it for optional or keyword arguments. Guile's @code{(ice-9 optargs)}
449 provides some macros to help with that task.
450
451 The syntax @code{let-optional} and @code{let-optional*} are for
452 destructuring rest argument lists and giving names to the various list
453 elements. @code{let-optional} binds all variables simultaneously, while
454 @code{let-optional*} binds them sequentially, consistent with @code{let}
455 and @code{let*} (@pxref{Local Bindings}).
456
457 @deffn {library syntax} let-optional rest-arg (binding @dots{}) body1 body2 @dots{}
458 @deffnx {library syntax} let-optional* rest-arg (binding @dots{}) body1 body2 @dots{}
459 These two macros give you an optional argument interface that is very
460 @dfn{Schemey} and introduces no fancy syntax. They are compatible with
461 the scsh macros of the same name, but are slightly extended. Each of
462 @var{binding} may be of one of the forms @var{var} or @code{(@var{var}
463 @var{default-value})}. @var{rest-arg} should be the rest-argument of the
464 procedures these are used from. The items in @var{rest-arg} are
465 sequentially bound to the variable names are given. When @var{rest-arg}
466 runs out, the remaining vars are bound either to the default values or
467 @code{#f} if no default value was specified. @var{rest-arg} remains
468 bound to whatever may have been left of @var{rest-arg}.
469
470 After binding the variables, the expressions @var{body1} @var{body2} @dots{}
471 are evaluated in order.
472 @end deffn
473
474 Similarly, @code{let-keywords} and @code{let-keywords*} extract values
475 from keyword style argument lists, binding local variables to those
476 values or to defaults.
477
478 @deffn {library syntax} let-keywords args allow-other-keys? (binding @dots{}) body1 body2 @dots{}
479 @deffnx {library syntax} let-keywords* args allow-other-keys? (binding @dots{}) body1 body2 @dots{}
480 @var{args} is evaluated and should give a list of the form
481 @code{(#:keyword1 value1 #:keyword2 value2 @dots{})}. The
482 @var{binding}s are variables and default expressions, with the variables
483 to be set (by name) from the keyword values. The @var{body1}
484 @var{body2} @dots{} forms are then evaluated and the last is the
485 result. An example will make the syntax clearest,
486
487 @example
488 (define args '(#:xyzzy "hello" #:foo "world"))
489
490 (let-keywords args #t
491 ((foo "default for foo")
492 (bar (string-append "default" "for" "bar")))
493 (display foo)
494 (display ", ")
495 (display bar))
496 @print{} world, defaultforbar
497 @end example
498
499 The binding for @code{foo} comes from the @code{#:foo} keyword in
500 @code{args}. But the binding for @code{bar} is the default in the
501 @code{let-keywords}, since there's no @code{#:bar} in the args.
502
503 @var{allow-other-keys?} is evaluated and controls whether unknown
504 keywords are allowed in the @var{args} list. When true other keys are
505 ignored (such as @code{#:xyzzy} in the example), when @code{#f} an
506 error is thrown for anything unknown.
507 @end deffn
508
509 @code{(ice-9 optargs)} also provides some more @code{define*} sugar,
510 which is not so useful with modern Guile coding, but still supported:
511 @code{define*-public} is the @code{lambda*} version of
512 @code{define-public}; @code{defmacro*} and @code{defmacro*-public}
513 exist for defining macros with the improved argument list handling
514 possibilities. The @code{-public} versions not only define the
515 procedures/macros, but also export them from the current module.
516
517 @deffn {library syntax} define*-public formals body1 body2 @dots{}
518 Like a mix of @code{define*} and @code{define-public}.
519 @end deffn
520
521 @deffn {library syntax} defmacro* name formals body1 body2 @dots{}
522 @deffnx {library syntax} defmacro*-public name formals body1 body2 @dots{}
523 These are just like @code{defmacro} and @code{defmacro-public} except that they
524 take @code{lambda*}-style extended parameter lists, where @code{#:optional},
525 @code{#:key}, @code{#:allow-other-keys} and @code{#:rest} are allowed with the usual
526 semantics. Here is an example of a macro with an optional argument:
527
528 @lisp
529 (defmacro* transmogrify (a #:optional b)
530 (a 1))
531 @end lisp
532 @end deffn
533
534 @node Case-lambda
535 @subsection Case-lambda
536 @cindex SRFI-16
537 @cindex variable arity
538 @cindex arity, variable
539
540 R5RS's rest arguments are indeed useful and very general, but they
541 often aren't the most appropriate or efficient means to get the job
542 done. For example, @code{lambda*} is a much better solution to the
543 optional argument problem than @code{lambda} with rest arguments.
544
545 @fnindex case-lambda
546 Likewise, @code{case-lambda} works well for when you want one
547 procedure to do double duty (or triple, or ...), without the penalty
548 of consing a rest list.
549
550 For example:
551
552 @lisp
553 (define (make-accum n)
554 (case-lambda
555 (() n)
556 ((m) (set! n (+ n m)) n)))
557
558 (define a (make-accum 20))
559 (a) @result{} 20
560 (a 10) @result{} 30
561 (a) @result{} 30
562 @end lisp
563
564 The value returned by a @code{case-lambda} form is a procedure which
565 matches the number of actual arguments against the formals in the
566 various clauses, in order. The first matching clause is selected, the
567 corresponding values from the actual parameter list are bound to the
568 variable names in the clauses and the body of the clause is evaluated.
569 If no clause matches, an error is signalled.
570
571 The syntax of the @code{case-lambda} form is defined in the following
572 EBNF grammar. @dfn{Formals} means a formal argument list just like
573 with @code{lambda} (@pxref{Lambda}).
574
575 @example
576 @group
577 <case-lambda>
578 --> (case-lambda <case-lambda-clause>)
579 <case-lambda-clause>
580 --> (<formals> <definition-or-command>*)
581 <formals>
582 --> (<identifier>*)
583 | (<identifier>* . <identifier>)
584 | <identifier>
585 @end group
586 @end example
587
588 Rest lists can be useful with @code{case-lambda}:
589
590 @lisp
591 (define plus
592 (case-lambda
593 (() 0)
594 ((a) a)
595 ((a b) (+ a b))
596 ((a b . rest) (apply plus (+ a b) rest))))
597 (plus 1 2 3) @result{} 6
598 @end lisp
599
600 @fnindex case-lambda*
601 Also, for completeness. Guile defines @code{case-lambda*} as well,
602 which is like @code{case-lambda}, except with @code{lambda*} clauses.
603 A @code{case-lambda*} clause matches if the arguments fill the
604 required arguments, but are not too many for the optional and/or rest
605 arguments.
606
607 Keyword arguments are possible with @code{case-lambda*} as well, but
608 they do not contribute to the ``matching'' behavior, and their
609 interactions with required, optional, and rest arguments can be
610 surprising.
611
612 For the purposes of @code{case-lambda*} (and of @code{case-lambda}, as a
613 special case), a clause @dfn{matches} if it has enough required
614 arguments, and not too many positional arguments. The required
615 arguments are any arguments before the @code{#:optional}, @code{#:key},
616 and @code{#:rest} arguments. @dfn{Positional} arguments are the
617 required arguments, together with the optional arguments.
618
619 In the absence of @code{#:key} or @code{#:rest} arguments, it's easy to
620 see how there could be too many positional arguments: you pass 5
621 arguments to a function that only takes 4 arguments, including optional
622 arguments. If there is a @code{#:rest} argument, there can never be too
623 many positional arguments: any application with enough required
624 arguments for a clause will match that clause, even if there are also
625 @code{#:key} arguments.
626
627 Otherwise, for applications to a clause with @code{#:key} arguments (and
628 without a @code{#:rest} argument), a clause will match there only if
629 there are enough required arguments and if the next argument after
630 binding required and optional arguments, if any, is a keyword. For
631 efficiency reasons, Guile is currently unable to include keyword
632 arguments in the matching algorithm. Clauses match on positional
633 arguments only, not by comparing a given keyword to the available set of
634 keyword arguments that a function has.
635
636 Some examples follow.
637
638 @example
639 (define f
640 (case-lambda*
641 ((a #:optional b) 'clause-1)
642 ((a #:optional b #:key c) 'clause-2)
643 ((a #:key d) 'clause-3)
644 ((#:key e #:rest f) 'clause-4)))
645
646 (f) @result{} clause-4
647 (f 1) @result{} clause-1
648 (f) @result{} clause-4
649 (f #:e 10) clause-1
650 (f 1 #:foo) clause-1
651 (f 1 #:c 2) clause-2
652 (f #:a #:b #:c #:d #:e) clause-4
653
654 ;; clause-2 will match anything that clause-3 would match.
655 (f 1 #:d 2) @result{} error: bad keyword args in clause 2
656 @end example
657
658 Don't forget that the clauses are matched in order, and the first
659 matching clause will be taken. This can result in a keyword being bound
660 to a required argument, as in the case of @code{f #:e 10}.
661
662
663 @node Higher-Order Functions
664 @subsection Higher-Order Functions
665
666 @cindex higher-order functions
667
668 As a functional programming language, Scheme allows the definition of
669 @dfn{higher-order functions}, i.e., functions that take functions as
670 arguments and/or return functions. Utilities to derive procedures from
671 other procedures are provided and described below.
672
673 @deffn {Scheme Procedure} const value
674 Return a procedure that accepts any number of arguments and returns
675 @var{value}.
676
677 @lisp
678 (procedure? (const 3)) @result{} #t
679 ((const 'hello)) @result{} hello
680 ((const 'hello) 'world) @result{} hello
681 @end lisp
682 @end deffn
683
684 @deffn {Scheme Procedure} negate proc
685 Return a procedure with the same arity as @var{proc} that returns the
686 @code{not} of @var{proc}'s result.
687
688 @lisp
689 (procedure? (negate number?)) @result{} #t
690 ((negate odd?) 2) @result{} #t
691 ((negate real?) 'dream) @result{} #t
692 ((negate string-prefix?) "GNU" "GNU Guile")
693 @result{} #f
694 (filter (negate number?) '(a 2 "b"))
695 @result{} (a "b")
696 @end lisp
697 @end deffn
698
699 @deffn {Scheme Procedure} compose proc1 proc2 @dots{}
700 Compose @var{proc1} with the procedures @var{proc2} @dots{} such that
701 the last @var{proc} argument is applied first and @var{proc1} last, and
702 return the resulting procedure. The given procedures must have
703 compatible arity.
704
705 @lisp
706 (procedure? (compose 1+ 1-)) @result{} #t
707 ((compose sqrt 1+ 1+) 2) @result{} 2.0
708 ((compose 1+ sqrt) 3) @result{} 2.73205080756888
709 (eq? (compose 1+) 1+) @result{} #t
710
711 ((compose zip unzip2) '((1 2) (a b)))
712 @result{} ((1 2) (a b))
713 @end lisp
714 @end deffn
715
716 @deffn {Scheme Procedure} identity x
717 Return X.
718 @end deffn
719
720 @deffn {Scheme Procedure} and=> value proc
721 When @var{value} is @code{#f}, return @code{#f}. Otherwise, return
722 @code{(@var{proc} @var{value})}.
723 @end deffn
724
725 @node Procedure Properties
726 @subsection Procedure Properties and Meta-information
727
728 In addition to the information that is strictly necessary to run,
729 procedures may have other associated information. For example, the
730 name of a procedure is information not for the procedure, but about
731 the procedure. This meta-information can be accessed via the procedure
732 properties interface.
733
734 The first group of procedures in this meta-interface are predicates to
735 test whether a Scheme object is a procedure, or a special procedure,
736 respectively. @code{procedure?} is the most general predicates, it
737 returns @code{#t} for any kind of procedure.
738
739 @rnindex procedure?
740 @deffn {Scheme Procedure} procedure? obj
741 @deffnx {C Function} scm_procedure_p (obj)
742 Return @code{#t} if @var{obj} is a procedure.
743 @end deffn
744
745 @deffn {Scheme Procedure} thunk? obj
746 @deffnx {C Function} scm_thunk_p (obj)
747 Return @code{#t} if @var{obj} is a thunk---a procedure that does
748 not accept arguments.
749 @end deffn
750
751 @cindex procedure properties
752 Procedure properties are general properties associated with
753 procedures. These can be the name of a procedure or other relevant
754 information, such as debug hints.
755
756 @deffn {Scheme Procedure} procedure-name proc
757 @deffnx {C Function} scm_procedure_name (proc)
758 Return the name of the procedure @var{proc}
759 @end deffn
760
761 @deffn {Scheme Procedure} procedure-source proc
762 @deffnx {C Function} scm_procedure_source (proc)
763 Return the source of the procedure @var{proc}. Returns @code{#f} if
764 the source code is not available.
765 @end deffn
766
767 @deffn {Scheme Procedure} procedure-properties proc
768 @deffnx {C Function} scm_procedure_properties (proc)
769 Return the properties associated with @var{proc}, as an association
770 list.
771 @end deffn
772
773 @deffn {Scheme Procedure} procedure-property proc key
774 @deffnx {C Function} scm_procedure_property (proc, key)
775 Return the property of @var{proc} with name @var{key}.
776 @end deffn
777
778 @deffn {Scheme Procedure} set-procedure-properties! proc alist
779 @deffnx {C Function} scm_set_procedure_properties_x (proc, alist)
780 Set @var{proc}'s property list to @var{alist}.
781 @end deffn
782
783 @deffn {Scheme Procedure} set-procedure-property! proc key value
784 @deffnx {C Function} scm_set_procedure_property_x (proc, key, value)
785 In @var{proc}'s property list, set the property named @var{key} to
786 @var{value}.
787 @end deffn
788
789 @cindex procedure documentation
790 Documentation for a procedure can be accessed with the procedure
791 @code{procedure-documentation}.
792
793 @deffn {Scheme Procedure} procedure-documentation proc
794 @deffnx {C Function} scm_procedure_documentation (proc)
795 Return the documentation string associated with @code{proc}. By
796 convention, if a procedure contains more than one expression and the
797 first expression is a string constant, that string is assumed to contain
798 documentation for that procedure.
799 @end deffn
800
801
802 @node Procedures with Setters
803 @subsection Procedures with Setters
804
805 @c FIXME::martin: Review me!
806
807 @c FIXME::martin: Document `operator struct'.
808
809 @cindex procedure with setter
810 @cindex setter
811 A @dfn{procedure with setter} is a special kind of procedure which
812 normally behaves like any accessor procedure, that is a procedure which
813 accesses a data structure. The difference is that this kind of
814 procedure has a so-called @dfn{setter} attached, which is a procedure
815 for storing something into a data structure.
816
817 Procedures with setters are treated specially when the procedure appears
818 in the special form @code{set!} (REFFIXME). How it works is best shown
819 by example.
820
821 Suppose we have a procedure called @code{foo-ref}, which accepts two
822 arguments, a value of type @code{foo} and an integer. The procedure
823 returns the value stored at the given index in the @code{foo} object.
824 Let @code{f} be a variable containing such a @code{foo} data
825 structure.@footnote{Working definitions would be:
826 @lisp
827 (define foo-ref vector-ref)
828 (define foo-set! vector-set!)
829 (define f (make-vector 2 #f))
830 @end lisp
831 }
832
833 @lisp
834 (foo-ref f 0) @result{} bar
835 (foo-ref f 1) @result{} braz
836 @end lisp
837
838 Also suppose that a corresponding setter procedure called
839 @code{foo-set!} does exist.
840
841 @lisp
842 (foo-set! f 0 'bla)
843 (foo-ref f 0) @result{} bla
844 @end lisp
845
846 Now we could create a new procedure called @code{foo}, which is a
847 procedure with setter, by calling @code{make-procedure-with-setter} with
848 the accessor and setter procedures @code{foo-ref} and @code{foo-set!}.
849 Let us call this new procedure @code{foo}.
850
851 @lisp
852 (define foo (make-procedure-with-setter foo-ref foo-set!))
853 @end lisp
854
855 @code{foo} can from now an be used to either read from the data
856 structure stored in @code{f}, or to write into the structure.
857
858 @lisp
859 (set! (foo f 0) 'dum)
860 (foo f 0) @result{} dum
861 @end lisp
862
863 @deffn {Scheme Procedure} make-procedure-with-setter procedure setter
864 @deffnx {C Function} scm_make_procedure_with_setter (procedure, setter)
865 Create a new procedure which behaves like @var{procedure}, but
866 with the associated setter @var{setter}.
867 @end deffn
868
869 @deffn {Scheme Procedure} procedure-with-setter? obj
870 @deffnx {C Function} scm_procedure_with_setter_p (obj)
871 Return @code{#t} if @var{obj} is a procedure with an
872 associated setter procedure.
873 @end deffn
874
875 @deffn {Scheme Procedure} procedure proc
876 @deffnx {C Function} scm_procedure (proc)
877 Return the procedure of @var{proc}, which must be an
878 applicable struct.
879 @end deffn
880
881 @deffn {Scheme Procedure} setter proc
882 Return the setter of @var{proc}, which must be either a procedure with
883 setter or an operator struct.
884 @end deffn
885
886 @node Inlinable Procedures
887 @subsection Inlinable Procedures
888
889 @cindex inlining
890 @cindex procedure inlining
891 You can define an @dfn{inlinable procedure} by using
892 @code{define-inlinable} instead of @code{define}. An inlinable
893 procedure behaves the same as a regular procedure, but direct calls will
894 result in the procedure body being inlined into the caller.
895
896 @cindex partial evaluator
897 Bear in mind that starting from version 2.0.3, Guile has a partial
898 evaluator that can inline the body of inner procedures when deemed
899 appropriate:
900
901 @example
902 scheme@@(guile-user)> ,optimize (define (foo x)
903 (define (bar) (+ x 3))
904 (* (bar) 2))
905 $1 = (define foo
906 (lambda (#@{x 94@}#) (* (+ #@{x 94@}# 3) 2)))
907 @end example
908
909 @noindent
910 The partial evaluator does not inline top-level bindings, though, so
911 this is a situation where you may find it interesting to use
912 @code{define-inlinable}.
913
914 Procedures defined with @code{define-inlinable} are @emph{always}
915 inlined, at all direct call sites. This eliminates function call
916 overhead at the expense of an increase in code size. Additionally, the
917 caller will not transparently use the new definition if the inline
918 procedure is redefined. It is not possible to trace an inlined
919 procedures or install a breakpoint in it (@pxref{Traps}). For these
920 reasons, you should not make a procedure inlinable unless it
921 demonstrably improves performance in a crucial way.
922
923 In general, only small procedures should be considered for inlining, as
924 making large procedures inlinable will probably result in an increase in
925 code size. Additionally, the elimination of the call overhead rarely
926 matters for large procedures.
927
928 @deffn {Scheme Syntax} define-inlinable (name parameter @dots{}) body1 body2 @dots{}
929 Define @var{name} as a procedure with parameters @var{parameter}s and
930 bodies @var{body1}, @var{body2}, @enddots{}.
931 @end deffn
932
933 @c Local Variables:
934 @c TeX-master: "guile.texi"
935 @c End: