5

我可以从用 c 或 c++ 编写的库中调用 lisp 中的函数吗?如何扩展 lisp?当你想做一些系统调用或类似的事情时,这很有用。

4

3 回答 3

8

从 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 是一个很好、安全的起点。

于 2008-12-19T02:34:42.277 回答
5

参见UFFICFFI以及更简洁的Clozure FFI

于 2008-12-18T20:29:56.647 回答
4

CFFI

于 2008-12-19T01:26:43.380 回答