Lisp импорт / загрузка файла

Есть ли способ в Лиспе включить код из других файлов Лисп?

Например, в C++ я могу сделать это:

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

И в Python,

import antigravity
import my_module
etc...

Есть ли эквивалент в Лиспе?

2 ответа

Решение

В дополнение к ответу Райнера:

Если вы хотите загрузить ASDF- системы, используйте:

(asdf:load-system 'my-system)

Некоторые реализации Lisp (например, CCL) также позволяют использовать require для загрузки систем ASDF, но эта функциональность зависит от реализации. Если вы используете Slime и хотите загрузить систему в интерактивном режиме, вы можете сделать это, набрав ,l my-system в слизи REPL.

Еще одна вещь, на которую я хотел обратить внимание: в отличие от Python, использование require или же load в CL не имеет ничего общего с пакетами (подумайте "пространства имен"). Так что, если код, который вы загружаете или требуете жизни, находится в своем собственном пакете, вы должны будете либо использовать его экспортированные символы (foo:bar), или включите эти пакеты в пакет, в котором живет ваш код ((defpackage my-package (:use cl package-you-want-to-use ...) ...)). Это не только отличается от Python imports, но также из препроцессора C #includes, последние являются просто текстовыми включениями.

Используйте стандартные функции, такие как LOAD и COMPILE-FILE.

ANSI Common Lisp также имеет функцию REQUIRE.

Если вы используете "системный" инструмент обслуживания как расширение Common Lisp, то вы также можете загрузить или скомпилировать всю "систему". "Система" - это набор файлов и подсистем, для которых определены такие операции, как загрузка и компиляция.

Другие вопросы по тегам