lisp - 如何在 Lisp 中编写函数。编译那个 Lisp 文件。然后运行那个 Lisp 程序
问题描述
在 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"
,则使用目标文件(如果可用);您可以load
直接调用“.lisp”文件,但不能保证该文件被编译或解释。这是一个小细节,此时您可能不应该关心编译与否。
? (load "test")
现在,test
在您的环境中可用,您可以调用它:
? (test)
:TEST ;; what the function printed
:TEST ;; the returned value, automatically printed by the REPL
无需重新启动 Lisp 环境,您就可以编辑文件并重新加载它。这是一个简约的设置,但对于开始来说应该足够了。
推荐阅读
- node.js - Mocha 测试用例在 Promise 获取数据之前执行
- angular - 如何从 s3 存储桶 url Angular 下载文件
- javascript - 我需要使用javascript在十进制值中从右到左添加一个数字
- java - 如何在 Thymeleaf 中进行下拉/选择
- javascript - Google Cloud Functions 与客户端的实时通信
- google-sheets - 如何将条件格式公式转换为单元格范围的基于单元格的公式?
- html - 表格没有扩展 div 的全宽?
- java - JMockit:如何为依赖持久层的类编写单元测试?
- c# - 按钮 BorderColor 渐变不支持运行时颜色更改?
- xamarin.forms - 来自 AppDelegate 的 Xamarin.Forms (iOS) MessagingCenter 消息未传递