问题描述
我目前正在尝试找出如何安装Common Music库:http://commonmusic.sourceforge.net/cm2/doc/cm.html,以便在Portacle上运行,Portacle是一个将Emacs与其他实现集成在一起以运行Common LISP的IDE。
通过以下步骤,我可以成功将Common Music的源代码树下载到我的Portacle安装目录中:位于http://commonmusic.sourceforge.net/cm2/doc/install.html#cvs上:
- 将目录更改为Lisp安装目录。
$ cd / usr / local / lisp
- 将shell变量CVSROOT设置为指向CVS存储库:
$ export CVSROOT =“:pserver:anonymous@commonmusic.cvs.sourceforge.net:/ cvsroot / commonmusic”
- 使用cvs登录名连接到Sourceforge CVS服务器,在提示输入密码时按Enter:
$ cvs登录 CVS密码:
- 使用cvs签出将CM的源树还原到您的Lisp安装目录:
$ cvs结帐-P厘米
。
打开我的Common Lisp REPL,portacle,我输入了与cm.lisp的特定路径名等效的(load“ /usr/local/lisp/cm/src/cm.lisp”)。
我收到以下错误。
加载过程中读取错误:
在SB-UNIX软件包中找不到符号“ UNIX-FILE-KIND”。
Line: 116,Column: 47,File-Position: 4278
Stream: #<SB-INT:FORM-TRACKING-STREAM for "file /usr/local/lisp/cm/cm.asd" {1004108F23}>
[SB-C :: INPUT-ERROR-IN-LOAD类型的条件]
。
如果有人熟悉Common Lisp并集成了Common Music,将不胜感激。
谢谢。
解决方法
问题是该系统是为另一个世界编写的。 Unix-file-kind
已于10年前从sb-unix
中删除。
在这里,它用于确定 pathname 是否命名现有目录。
我不确定在该系统加载上下文中使用cl-fad
会如何工作(如今可以变得更简单,但这是有些工作),所以也许您可以内联cl-fad:directory-exists-p
的工作,或者也许为您工作(虽然有点hacky):
#+sbcl (let ((truename (probe-file dir)))
(and truename
(string= (namestring truename)
(directory-namestring truename))))
您将用此替换cm.lisp
中当前显示#+sbcl (eq :directory (sb-unix:unix-file-kind (namestring dir)))
的行。
…但是我希望这只是冰山一角。祝你好运!