Как включить пакет "порт" под CLISP в Ubuntu - PullRequest
4 голосов
/ 18 февраля 2009

Я пытаюсь следовать этому уроку: http://cl -cookbook.sourceforge.net / sockets.html

И я не могу заставить его работать из-за пакета порта. Сначала (in-package :port) не работал, он сказал, что пакет не может быть найден. Поэтому я изменил его на (clc:clc-require :port), но это вызывает другую ошибку:

INTERN("STRUCTURE-KCONSTRUCTOR"): #<PACKAGE SYSTEM> is locked ...

Что мне делать в Ubuntu, чтобы оно работало?

Ответы [ 4 ]

3 голосов
/ 20 февраля 2009

К сожалению, поваренная книга по-прежнему ссылается на PORT от CLOCC. Я рекомендую против PORT в частности и CLOCC в целом.

Хорошая новость новее, существуют лучшие библиотеки сокетов, и у вас не будет больших проблем с их использованием. Вот ваши варианты:

  • usocket - это библиотека переносимости, которая абстрагируется от функций сокетов в различных реализациях Lisp. Это духовный преемник тривиальных сокетов, и многие библиотеки Common Lisp сегодня зависят от usocket.

    Я рекомендую usocket для новых пользователей.

  • Другим претендентом является iolib , который повторно реализует сокеты с использованием FFI вместо использования средств реализации. В нем также реализованы и другие амбициозные инновации, такие как замена имен путей Common Lisp, мультиплексирование ввода / вывода и собственная потоковая абстракция.

    Программисты, желающие читать исходный код и модульные тесты, сочтут iolib приятным, но он все еще находится в состоянии постоянного изменения и не имеет документации.

    Я рекомендую iolib для заядлых хакеров.

Возможны многие способы установки. Как пользователь Ubuntu, вы можете просто использовать aptitude:

$ aptitude install cl-usocket
$ clisp
[1]> (asdf:operate 'asdf:load-op :usocket)

Помните, что пакеты Common Lisp в Debian и Ubuntu часто устарели и довольно сильно отличаются от предыдущих версий. Если вам нужна помощь в Интернете, вы получите более полезные ответы, если переключитесь на последующую версию этих пакетов.

Лично я использую Debian, но вместо пакетов Debian для Lisp запускаю clbuild . Обратите внимание, что для clbuild необходим CLISP, а не тот CLISP, который поставляется в Ubuntu.

2 голосов
/ 18 февраля 2009

Установите пакет cl-port с помощью apt-get install cl-port.

1 голос
/ 18 февраля 2009

require и in-package - это две разные вещи.

  • require загружает определенный код в работающее изображение lisp, чтобы сделать его доступным (если его там еще нет).
  • in-package изменяет «текущее» пространство имен на определенный пакет, чтобы можно было вызывать объекты из этого пакета без префикса пакета (например, split вместо cl-ppcre:split). Конечно, для этого этот пакет должен «существовать» во время выполнения.
1 голос
/ 18 февраля 2009

Взгляните на asdf-install . После настройки пакеты lisp устанавливаются так же просто, как:

(require 'asdf-install)
(asdf-install:install 'package-name)

В любом случае, зажим больше не используется. Взгляните на SBCL , который наиболее широко используется в распространенных реализациях lisp.

Кроме того, для изучения общего лисписа вам лучше начать с Практический Общий Лисп как отличной и бесплатной книги.

...