Есть ли способ в Lisp включить код из других Lisp файлов?
Например, в С++ я могу это сделать:
#include <iostream>
#include <string>
#include "myfile.h"
etc...
И в Python
import antigravity
import my_module
etc...
Существует ли эквивалент Lisp?
Есть ли способ в Lisp включить код из других Lisp файлов?
Например, в С++ я могу это сделать:
#include <iostream>
#include <string>
#include "myfile.h"
etc...
И в Python
import antigravity
import my_module
etc...
Существует ли эквивалент Lisp?
В дополнение к ответу Райнера:
Если вы хотите загрузить ASDF -системы, используйте:
(asdf:load-system 'my-system)
Некоторые реализации Lisp (например, CCL) также позволяют использовать require для загрузки ASDF-систем, но эта функциональность зависит от реализации. Если вы используете Slime и хотите загрузить систему в интерактивном режиме, вы можете сделать это, набрав ,l my-system в Slime 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, вы также можете загрузить или скомпилировать целую "систему". "Система" представляет собой набор файлов и подсистем, для которых определены операции, такие как загрузка и компиляция.