Подтвердить что ты не робот

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

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

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

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

И в Python

import antigravity
import my_module
etc...

Существует ли эквивалент Lisp?

4b9b3361

Ответ 1

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

Если вы хотите загрузить 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, причем последние являются лишь текстовыми включениями.

Ответ 2

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

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

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