Необычно вызывать неисписанный код из lisp, и это редко требуется. CLX (реализация клиента X11 для CL) не связана с реализацией Xlib, но напрямую «говорит» на X11. В любой системе ваша реализация CL, вероятно, уже имеет отличные хуки операционной системы, что делает это ненужным.
Тем не менее, ответ зависит от реализации lisp:
В ECL вы можете фактически разместить среду CL под C и просто вызвать cl_eval()
с кодом для выполнения. Это может позволить вам написать ваше приложение (или хост приложения) на C (или C ++) и «вызвать» код lisp.
В CCL есть C-совместимый интерфейс вызова, который позволяет вам сделать что-то вроде этого:
(with-cstrs ((x "Hello World"))
(#_puts x))
В большинстве других реализаций CL (например, SBCL; да, это также работает в ECL и CCL), вы можете использовать UFFI (или CFFI), который просто позволяет вам вызывать функции C, о которых говорят другие люди. Если это все, что вы хотите сделать, то CFFI - это хорошее и безопасное место для старта.