123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- @c -*-texinfo-*-
- @c This is part of the GNU Guile Reference Manual.
- @c Copyright (C) 2012 Free Software Foundation, Inc.
- @c See the file guile.texi for copying conditions.
- @node Curried Definitions
- @section Curried Definitions
- The macros in this section are provided by
- @lisp
- (use-modules (ice-9 curried-definitions))
- @end lisp
- @noindent
- and replace those provided by default.
- Prior to Guile 2.0, Guile provided a type of definition known colloquially
- as a ``curried definition''. The idea is to extend the syntax of
- @code{define} so that you can conveniently define procedures that return
- procedures, up to any desired depth.
- For example,
- @example
- (define ((foo x) y)
- (list x y))
- @end example
- is a convenience form of
- @example
- (define foo
- (lambda (x)
- (lambda (y)
- (list x y))))
- @end example
- @deffn {Scheme Syntax} define (@dots{} (name args @dots{}) @dots{}) body @dots{}
- @deffnx {Scheme Syntax} define* (@dots{} (name args @dots{}) @dots{}) body @dots{}
- @deffnx {Scheme Syntax} define-public (@dots{} (name args @dots{}) @dots{}) body @dots{}
- Create a top level variable @var{name} bound to the procedure with
- parameter list @var{args}. If @var{name} is itself a formal parameter
- list, then a higher order procedure is created using that
- formal-parameter list, and returning a procedure that has parameter list
- @var{args}. This nesting may occur to arbitrary depth.
- @code{define*} is similar but the formal parameter lists take additional
- options as described in @ref{lambda* and define*}. For example,
- @example
- (define* ((foo #:keys (bar 'baz) (quux 'zot)) frotz #:rest rest)
- (list bar quux frotz rest))
- ((foo #:quux 'foo) 1 2 3 4 5)
- @result{} (baz foo 1 (2 3 4 5))
- @end example
- @code{define-public} is similar to @code{define} but it also adds
- @var{name} to the list of exported bindings of the current module.
- @end deffn
|