Macro | Package: excl | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 10.1 Unrevised from 10.0 to 10.1. 10.0 version

## named-function

Arguments: name lambda-expression

The macro definition for this extension is approximately:

`(defmacro excl:named-function (name function) (declare (ignore name)) `(function ,function))`

When compiling a named-function form, the compiler treats the form just like a function form, except that the name is used if possible in the resulting function. This is especially useful for closures of a particular kind, as in the following example:

    user(1): (defun get-one-arg-frobber (ix)
                (named-function frobber
                  (lambda (arg) (frob-by-index ix arg))))
    get-one-arg-frobber
    user(2): (compile *)
    Warning: While compiling these undefined
    functions were referenced: frob-by-index.
    get-one-arg-frobber
    nil
    nil
    user(3): (get-one-arg-frobber 10)
    #<Closure frobber @ #x2065dea9>
    user(4):

Note that the name of the closure is taken from the named-function form. Contrast that with the following definition using the more traditional function form:

    user(7): (defun get-one-arg-frobber (ix)
                (function (lambda (arg)
                             (frob-by-index ix arg))))
    get-one-arg-frobber
    user(8): (compile *)
    Warning: While compiling these undefined
    functions were referenced: frob-by-index.
    get-one-arg-frobber
    nil
    nil
    user(9): (get-one-arg-frobber 12)
    #<Closure (:internal get-one-arg-frobber 0) @ #x20664fa1>
    user(10):

Copyright (c) 1998-2022, Franz Inc. Lafayette, CA., USA. All rights reserved.
This page was not revised from the 10.0 page.
Created 2019.8.20.

|  | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 10.1 Unrevised from 10.0 to 10.1. 10.0 version