2011-03-27 9 views
17

¿Hay alguna forma en Lisp de incluir código de otros archivos Lisp?Lisp importando/cargando el archivo

Por ejemplo, en C++ que puedo hacer esto:

#include <iostream> 
#include <string> 
#include "myfile.h" 
etc... 

Y en Python,

import antigravity 
import my_module 
etc... 

¿Existe un equivalente Lisp?

Respuesta

10

Además de la respuesta de Rainer:

Si desea cargar ASDF -sistemas, utilice:

(asdf:load-system 'my-system) 

Algunas implementaciones de Lisp (CCL por ejemplo) también permiten el uso de require para sistemas de carga ASDF, pero esa funcionalidad depende de la implementación. Si está utilizando Slime y desea cargar un sistema de forma interactiva, puede hacerlo escribiendo ,l my-system en Slime REPL.

Otra cosa que quería señalar es que, a diferencia de Python, usar require o load en CL no tiene nada que ver con los paquetes (piense en "espacios de nombres"). Por lo tanto, si el código que está cargando o necesitando vidas se encuentra en su propio paquete, deberá usar sus símbolos exportados calificados (foo:bar) o incluir esos paquetes en el paquete en el que reside su código ((defpackage my-package (:use cl package-you-want-to-use ...) ...)). Esto no solo difiere de Python import s, sino también del preprocesador C #include s, estos últimos son meras inclusiones textuales.

16

Utilice funciones estándar como LOAD y COMPILE-FILE.

ANSI Common Lisp también tiene una función REQUERIDA.

Si usa la herramienta de mantenimiento "del sistema" como una extensión de Common Lisp, también puede cargar o compilar un "sistema" completo. Un 'sistema' es una colección de archivos y subsistemas para los cuales se definen operaciones como load y compile.

Cuestiones relacionadas