Next: , Previous: Structures, Up: Standards


2.13 Functions

All functions in ECL are either compiled into bytecodes to be interpreted, or they are translated into C and then compiled using a native C compiler. Interpreted functions are printed using the formats

     #<interpreted-function @var{name}>
     #<interpreted-function @code{address}>
Compiled functions (including compiled macro-expansion functions) are printed in the following formats.
     #<compiled-function @var{name}>
     #<compiled-closure nil>

The output of (symbol-function fun) is a list, is either a function object if 'fun is has a function definition, (macro . function-object) if 'fun is a macro, and 'special if 'fun is a special form.

ECL usually drops the source code of a function unless the global variable si:*keep-definitions* was true when the function was translated into bytecodes. Therefore, if you wish to use #'compile and #'disassemble on defined functions, you should issue (setq si:*keep-definitions* t) at the beginning of your session.

Common-Lisp constants related to functions have the following values in ECL.

     call-arguments-limit = 64
     lambda-list-keywords = (@optional{} @rest{} @keys{} @allow{}
                               @aux{} &whole &environment &body)
     lambda-parameters-limit = 64
      multiple-values-limit = 32

Refer to [see Steele:84] for their meanings.