Как структурирован код на Лиспе?Что такое пакеты и системы? - PullRequest
3 голосов
/ 16 февраля 2011

Я изучаю Lisp (SBCL), и меня смущает, как структурирован код lisp. Я полагаю, что пакеты Lisp похожи на модули Python?

Я хочу сделать что-то подобное.

utilities.py:

def foo():
    print "And there is silence!"

main.py:

import utilities as u

u.foo()

Я посмотрел пакеты, загрузку и системы asdf. Я до сих пор не понимаю, как все это сочетается.

Ответы [ 3 ]

3 голосов
/ 17 февраля 2011

Относительно сравнения с Python:

Пакеты - это наиболее похожая вещь в модулях CL to Python, поскольку оба являются пространствами имен. Системы и системные инструменты (такие как ASDF) больше похожи на такие вещи, как Distutils и Setuptools в Python.

Самое важное различие между модулями Python и пакетами CL: пакеты не зависят от файлов и каталогов. Вместо этого вы используете defpackage для создания пакетов и use-package для помещения следующего кода в конкретный пакет. Существуют и другие операторы, связанные с пакетами, но они в основном для интерактивного использования, эти два наиболее важны в исходных файлах.

См. соответствующую главу в Практическом Общем Лиспе , чтобы получить более подробную информацию.

2 голосов
/ 17 февраля 2011

Как было отмечено, по сравнению с другими языками:

  • Пакеты соответствуют пространствам имен .
  • Системы соответствует модулям или библиотекам (т. Е. Коллекциям кода).

О пакетах: для того, чтобы получить те (которые необходимо избегатьконфликты символов и тому подобное), я настоятельно рекомендую прочитать Полное руководство идиота по распространенным пакетам Lisp .

2 голосов
/ 16 февраля 2011

Пакет - это пространство имен для символов.Можно импортировать и экспортировать символы из и в символы.Символ может быть заключен в одной упаковке.Пакеты могут использоваться другими пакетами.

Программа структурирована в системы.Система - это набор файлов, зависимостей, правил сборки, информации по умолчанию и многого другого, в зависимости от используемого системного инструмента.ASDF является одним из тех.Загрузка библиотек выполняется загрузочными системами.Системы также могут быть скомпилированы, распечатаны, ...

Пакеты и системы независимы друг от друга и не связаны между собой.используйте один или несколько пользовательских пакетов.Это позволяет избежать конфликтов имен с символами из другого загруженного программного обеспечения.

...