在 Common Lisp 中编写、编译和测试一个函数,该函数接受一个列表并计算列表中正整数的总数。必须编译然后执行包含函数的 .lisp 文件。在编译该文件后开始传递它,列出要生成的结果的结果,从而测试函数的正确性。
我有这个功能。我可以通过将 if 直接放入 Lisp 命令行来原始运行它。简单地说,我只需要弄清楚如何编译文件,然后将它的列表传递到终端上进行测试。
(count-if#'(lamda (x) (> x 0))
我需要编译它然后例如传递给它这个 ex::( 1 2 3 4 5)结果应该是::5这是因为它们有 5 个值大于 0
写一个文件:
$ echo "(defun test () (print :test))" > test.lisp
在同一个目录下,启动你的 Common Lisp 环境(以 CCL 为例),你有一个 REPL;编译文件:
? (compile-file "test.lisp")
#P"/tmp/test.lx64fsl"
NIL
NIL
请注意,如果您尝试运行 test
函数,将会出现错误,因为它在您的环境中未定义。
加载生成的目标文件;如果加载 "test"
,则使用目标文件(如果可用);您可以直接在“.lisp”文件上调用load
,但是这样就无法保证文件被编译或解释。这是一个小细节,此时您可能不应该关心编译与否。
? (load "test")
现在,test
在您的环境中可用,您可以调用它:
? (test)
:TEST ;; what the function printed
:TEST ;; the returned value, automatically printed by the REPL
无需重新启动 Lisp 环境,您可以编辑文件并重新加载它。这是一个简约的设置,但应该足以开始。
我是一名优秀的程序员,十分优秀!