Lisp 如何运行为Digitool 4.3(2003)编写的算法?

Lisp 如何运行为Digitool 4.3(2003)编写的算法?,lisp,common-lisp,mcl,Lisp,Common Lisp,Mcl,我从事计算机音乐。我在2003年发现了在Lisp中实现的,正是“Digitool MCL 4.3”。我想运行这段代码,最好是在Linux x86机器上运行,以便将其结果与其他类似代码进行比较 我是Lisp新手,但到目前为止,我的研究让我认为Digitool MCL不再可用。我想到了两种可能对我有帮助的方法: 一个虚拟环境(Docker或其他)将模拟2003年的机器 一个代码翻译工具,它可以将2003年的源代码转换成现在可以执行的代码 我没有成功地找到这两个选项中的一个,也没有直接用sbcl运

我从事计算机音乐。我在2003年发现了在Lisp中实现的,正是“Digitool MCL 4.3”。我想运行这段代码,最好是在Linux x86机器上运行,以便将其结果与其他类似代码进行比较

我是Lisp新手,但到目前为止,我的研究让我认为Digitool MCL不再可用。我想到了两种可能对我有帮助的方法:

  • 一个虚拟环境(Docker或其他)将模拟2003年的机器
  • 一个代码翻译工具,它可以将2003年的源代码转换成现在可以执行的代码
我没有成功地找到这两个选项中的一个,也没有直接用
sbcl
运行它(但是,作为一个新手,我可能错过了一个小的修改,使它可以轻松运行)

有人能帮我吗?

小结 这段代码非常接近于可移植的CL:您不需要模拟老式Mac来运行它。我在几分钟内在三个实现(SBCL、LispWorks、CCL)上运行了它。然而,如果你不是一个口齿不清的人(并且不想成为口齿不清的人),那么做起来会有点麻烦

但是我不能给你发一个固定版本,因为这不是一个合适的论坛,也因为我们需要得到作者的许可才能这么做。我问过他是否对便携式版本感兴趣,如果他感兴趣,我会在适当的时候寄给他一个。你也可以联系并要求得到通知

(Meta summary:虽然我认为这个问题很好,但任何合理的答案可能都不适合。)


细节 这段代码的一个初始问题是,该文件使用了旧的Mac line end约定(我认为:无论如何不是Unix):除非您使用的任何Lisp都足够聪明,能够发现这一点(有些是,SBCL似乎不是,尽管我确信有选项可以告诉它),否则您需要转换它

因此,实现该算法的代码非常非常接近于可移植的Common Lisp。它对非标准事物有四种依赖性:

  • 两个全局变量,
    *保存本地符号*
    *详细评估选择*
  • 两个功能:
    选择文件对话框
    选择目录对话框
全局变量可能会被安全地注释掉,因为我认为它们可能只是编译器的控件。这些函数有相当明显的规范:它们显然是为了弹出文件/目录选择器

但是,您不能使用使用这些函数的代码位,所以您可以编译它,获得一些关于未定义函数的编译器警告,然后就可以了

但事实上,它比这更好:MCL的后代是:CCL是免费的,开源的。CCL已经有了
选择文件对话框
选择目录对话框
,两个全局文件都存在,尽管其中一个不再导出

不幸的是,对于路径名作为字符串的样子的假设存在一些隐藏的可移植性问题:我认为这是对OSX之前的Mac上的东西做了一些假设。这类问题很容易解决,但往往有点棘手(我认为在这种情况下很容易解决)。所以,答案还是一样,就是不要调用那些大量使用路径名的东西:

> (ps13-test-from-file-list (directory "~/Downloads/d/*.opnd"))

[... much output ...]

Total number of errors = 81.
Total number of notes = 41544.
Percentage correct = 99.81%

nil
请注意,上述输出来自,而不是CCL:CCL的工作原理与任何CL一样好


SBCL还有一个问题:SBCL中的
CL-USER
包已经使用了一个导出此代码中定义的
int
的包。所以您需要在其他包中编译它。但是考虑到这一点,它在SBCL中也很好。

Common Lisp是一种标准化语言,MCL实现了这个Common Lisp。如果没有使用任何细节,那么该代码可能会在其他实现中运行。如果代码使用了MCL&Mac特定的特性,那么它需要一些移植。您需要查看代码,看看它是否是可移植代码。谢谢您的评论。不幸的是,我不知道Lisp,我完全无法判断是否使用了“MCL&Mac特定功能”。我只知道我在尝试运行它时遇到了一大堆警告和错误,也许我甚至以错误的方式“启动”了它……哇!非常感谢您的详细回答!是的,如果你从作者那里得到了一个肯定的答案,我希望得到通知,以使这个代码可移植(事实上,我自己也差点问他)。关于我的信息,哪个论坛更适合这个问题?@rfs:好的,我已经给他发了邮件,如果他回复了,我想我们可以通过他联系。我把我的“不适合这么做”的评论用错了词(现在改了):我认为这个问题很好,只是我的答案(你不可能知道!)不太合适。对不起:我不是想暗示你问错地方了@rfs:现在有一个挂起的pull请求,它有一些可移植性修复。但是请注意,我认为Java中有更新版本的
ps13
算法,如果您的目标是研究而不是使用Lisp,那么您可能希望运行这些算法。