2009-12-20 13 views
6

Estoy pasando por Practical Common Lisp, estoy casi terminado, y una pregunta que no me ha respondido hasta ahora (o tal vez me la he perdido) es la diferencia entre "requerir" y "cargar".¿Cuál es la diferencia entre requerir y cargar en el ceceo común?

¿Cuál es la diferencia?

Gracias.

+0

Para cualquiera que lea esta pregunta y responda a ella: _ ** requiere ** y todo el sistema de módulos ** está en desuso ** en Common Lisp desde la estandarización ANSI !. – hijarian

Respuesta

8

require se utiliza para los módulos, que cada uno puede constar de uno o varios archivos.

load se utiliza para cargar un solo archivo arbitrario.

Los require pruebas de función si un módulo ya está presente (utilizando una comparación mayúsculas y minúsculas); si el módulo no está presente, solicite para cargar el archivo apropiado o un conjunto de archivos. El argumento de la ruta , si está presente, es una sola ruta de acceso o una lista de rutas cuyos archivos se deben cargar en orden, a la izquierda a la derecha. Si el argumento del nombre de ruta es nil o no se proporciona, el sistema intentará determinar, de alguna manera dependiente del sistema , qué archivos cargar. Esto generalmente implicará algún registro central de los nombres de los módulos y las listas de archivos asociadas.

Fuente: http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node119.html

La función load carga el fichero nombrado por nombre del archivo en el entorno Lisp. Se se supone que un texto (carácter archivo) puede ser automáticamente distingue de un objeto (binario) archivo por algunos medios dependientes de la implementación apropiadas, posiblemente por el tipo de archivo. Los valores predeterminados para nombre de archivo se toman de la variable default-pathname-defaults. Si el nombre de archivo (después de la fusión de los valores predeterminados ) no especifica un tipo, y ambos tipos de texto y objetos del archivo están disponibles en el sistema , la carga debe intentar seleccionar el archivo más apropiado por algunos medios dependientes de la implementación.

Fuente: http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node217.html

+4

CLTL no es una buena referencia primaria para CL; HyperSpec es mejor. Vea http://l1sp.org/cl/load o http://l1sp.org/cl/require para enlaces cortos a los lugares correctos. – Xach

2

La diferencia es que (require) carga un módulo si no ha sido ya cargado; (load) carga un archivo.

Cuestiones relacionadas