我可以从用c或c ++编写的库中调用lisp函数吗?我该如何扩展lisp?当你想做一些系统调用或类似的事情时,这很有用.
从lisp调用非lisp代码是很少见的,而且很少需要.CLX(CL的X11客户端实现)不链接到Xlib实现,而是直接"说出"X11.在任何系统上,您的CL实现可能已经具有出色的操作系统挂钩,这使得不必要.
也就是说,答案取决于lisp的实现:
在ECL中,您实际上可以在C下托管CL环境,只需调用cl_eval()
代码即可执行.这可以让您用C(或C++)编写应用程序(或应用程序主机)并"调用"lisp代码.
在CCL中,有一个C兼容的调用接口,可以让你做这样的事情:
(with-cstrs ((x "Hello World")) (#_puts x))
在大多数其他CL实现中(如SBCL;以及是的,这也适用于ECL和CCL),您可以使用UFFI(或CFFI),它只是让您调用C函数,这是其他人正在谈论的.如果这就是你想要的,那么CFFI是一个好的,安全的起点.
参见UFFI和CFFI以及光滑的Clozure FFI