4

我正在尝试遵循本教程: http ://cl-cookbook.sourceforge.net/sockets.html

由于端口包,我无法让它工作。首先(in-package :port)不起作用,它说找不到包。所以我将其更改为,(clc:clc-require :port)但这会导致另一个错误:

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

在ubuntu下我应该怎么做才能让它工作?

4

4 回答 4

3

不幸的是,cl-cookbook 仍然引用 CLOCC 的 PORT。我特别推荐反对 PORT 和一般的 CLOCC。

好消息是存在更新、更好的套接字库,使用它们不会有太多麻烦。以下是您的选择:

  • usocket是一个可移植库,它抽象了各种 Lisp 实现中的套接字特性。它是 trivial-sockets 的精神继承者,如今许多 Common Lisp 库都依赖于 usocket。

    我向新用户推荐 usocket。

  • 另一个竞争者是iolib,它使用 FFI 重新实现套接字,而不是在实现的设施上构建。它还具有其他雄心勃勃的创新,例如替代 Common Lisp 路径名、I/O 多路复用和它自己的流抽象。

    愿意阅读源代码和单元测试的程序员会发现 iolib 很有趣,但它仍然处于不断变化的状态并且缺乏文档。

    我向狂热的黑客推荐 iolib。

许多安装方法是可能的。作为 Ubuntu 用户,您可以只使用 aptitude:

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

请注意 Debian 和 Ubuntu 中的 Common Lisp 包通常已经过时并且与上游有很大不同。如果您正在在线寻求帮助,如果您切换到这些软件包的上游版本,您将获得更多有用的响应。

我个人使用 Debian,但运行clbuild而不是 Lisp 的 Debian 软件包。请注意,clbuild 需要上游 CLISP,而不是 Ubuntu 提供的 CLISP。

于 2009-02-20T13:54:40.363 回答
2

使用apt-get install cl-port.

于 2009-02-18T18:42:36.940 回答
1

看看asdf-install。设置好之后,lisp 包的安装非常简单:

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

无论如何,clisp 已经不再使用了。看看SBCL,它是最广泛使用的通用 lisp 实现。

此外,要学习 common lisp,您最好从Practical Common Lisp作为一本优秀且免费的书开始。

于 2009-02-18T18:32:03.597 回答
1

requirein-package是两个不同的东西。

  • require将某些代码加载到正在运行的 lisp 映像中,以使其可用(如果它不存在)。
  • in-package将“当前”命名空间更改为某个包,以便您可以在没有包前缀的情况下调用该包中的对象(例如split,而不是cl-ppcre:split)。当然,这个包必须已经“存在”在运行时中。
于 2009-02-18T19:48:45.580 回答