Answers

Question and Answer:

  Home  Lisp Programming

⟩ How to call non-Lisp functions from Lisp?

Most Lisp implementations for systems where Lisp is not the most common

language provide a "foreign function" interface. As of now there has been

no significant standardization effort in this area. They tend to be

similar, but there are enough differences that it would be inappropriate to

try to describe them all here. In general, one uses an

implementation-dependent macro that defines a Lisp function, but instead of

supplying a body for the function, one supplies the name of a function written

in another language; the argument list portion of the definition is

generally augmented with the data types the foreign function expects and

the data type of the foreign function's return value, and the Lisp

interface function arranges to do any necessary conversions. There is also

generally a function to "load" an object file or library compiled in a

foreign language, which dynamically links the functions in the file being

loaded into the address space of the Lisp process, and connects the

interface functions to the corresponding foreign functions.

If you need to do this, see the manual for your language implementation for

full details. In particular, be on the lookout for restrictions on the

data types that may be passed. You may also need to know details about the

linkage conventions that are used on your system; for instance, many C

implementations prepend an underscore onto the names of C functions when

generating the assembler output (this allows them to use names without

initial underscores internally as labels without worrying about conflicts),

and the foreign function interface may require you to specify this form

explicitly.

Franz Allegro Common Lisp's "Foreign Function Call Facility" is

described in chapter 10 of the documentation. Calling Lisp Functions

from C is treated in section 10.8.2. The foreign function interface in

Macintosh Common Lisp is similar. The foreign function interface for

KCL is described in chapter 10 of the KCL Report. The foreign function

interfaces for Lucid on the Vax and Lucid on the Sun4 are

incompatible. Lucid's interface is described in chapter 5 of the

Advanced User's Guide.

 222 views

More Questions for you: