Lisp импорт / загрузка файла - PullRequest
18 голосов
/ 27 марта 2011

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

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

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

А в Python,

import antigravity
import my_module
etc...

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

Ответы [ 2 ]

16 голосов
/ 27 марта 2011

Используйте стандартные функции, такие как ЗАГРУЗКА и Скомпилированный файл .

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

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

10 голосов
/ 27 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...