如何在Lisp中编写函数。编译那个Lisp文件。然后运行Lisp程序

如何在Lisp中编写函数。编译那个Lisp文件。然后运行Lisp程序,lisp,Lisp,在Common Lisp中编写、编译和测试函数,该函数获取一个列表并计算列表中正整数的总数。必须编译然后执行包含函数的.lisp文件。编译该文件后,开始将其传递到列表中,在结果之后生成结果,从而测试函数的正确性 我有这个功能。我可以通过将if直接放入Lisp命令行来粗略地运行它。简单地说,我只需要弄清楚如何编译该文件,然后在终端上传递它的列表来测试它 如果lamda x>x 0,则计数 我需要整理一下 然后,例如,将其传递给ex::1 2 3 4 5 结果应该是::5 这是因为它们是5个大于0的

在Common Lisp中编写、编译和测试函数,该函数获取一个列表并计算列表中正整数的总数。必须编译然后执行包含函数的.lisp文件。编译该文件后,开始将其传递到列表中,在结果之后生成结果,从而测试函数的正确性

我有这个功能。我可以通过将if直接放入Lisp命令行来粗略地运行它。简单地说,我只需要弄清楚如何编译该文件,然后在终端上传递它的列表来测试它

如果lamda x>x 0,则计数

我需要整理一下 然后,例如,将其传递给ex::1 2 3 4 5 结果应该是::5 这是因为它们是5个大于0的值写入文件:

$ echo "(defun test () (print :test))" > test.lisp
在同一目录中,用CCL启动公共Lisp环境示例,您有一个REPL;编译文件:

? (compile-file "test.lisp")
#P"/tmp/test.lx64fsl"
NIL
NIL
请注意,如果尝试运行测试函数,将出现错误,因为它在您的环境中未定义

加载生成的对象文件;如果加载测试,则使用对象文件(如果可用);您可以直接在.lisp文件上调用load,但是不能保证该文件被编译或解释。这是这里的一个小细节,在这一点上,您可能不应该关心编译与否

? (load "test")
现在,测试在您的环境中可用,您可以将其称为:

? (test)

:TEST ;; what the function printed
:TEST ;; the returned value, automatically printed by the REPL
无需重新启动Lisp环境,即可编辑文件并重新加载。
这是一个最低限度的设置,但应该足以启动。

欢迎使用堆栈溢出!在询问有关堆栈溢出的问题之前,请遵循指导原则。如果出于任何原因,无法访问编译文件(例如LispWorks交付的应用程序),是否有方法使用编译函数编译lisp文件中的所有函数?根据,但我不知道;如果是这种情况,您可以首先加载文件,这可能会调用compile本身;如果要显式编译所有函数,需要打开文件,读取循环中的所有表单,对它们求值,当结果是一个fbound符号时,对其进行编译。这有点像黑客,但如果需要,它可以完成这项工作。这是我从一位应用程序维护人员那里得到的答案,他问我为什么应用程序中没有可用的编译文件:LispWorks提供的应用程序(如OpenMusic)嵌入了大部分原始Lisp环境,除了编译文件功能。@Student在这种情况下,据我所知,您有以下选项:1不编译,只加载文件2有您自己的爱好者版本的LispBroks相同版本,在其中调用编译文件,然后在OpenMusic中加载;你可能有依赖问题;3从源代码构建OpenMusic并在此处运行,不要交付应用程序,或将交付内容包括编译文件;我的猜测是,Lispworks的爱好者版可能有局限性,但我不知道。直接与维护人员交谈肯定会有更好的答案。我不理解你答案的第2部分。从lw调用编译文件后,我应该在openmusic中加载什么?