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 import
s, но также из препроцессора C #include
s, последние являются просто текстовыми включениями.
Используйте стандартные функции, такие как LOAD и COMPILE-FILE.
ANSI Common Lisp также имеет функцию REQUIRE.
Если вы используете "системный" инструмент обслуживания как расширение Common Lisp, то вы также можете загрузить или скомпилировать всю "систему". "Система" - это набор файлов и подсистем, для которых определены такие операции, как загрузка и компиляция.