193_common lisp文件句柄的使用

ε祈祈猫儿з 提交于 2020-01-10 16:22:54

         分析使用的例子来自于《实用common lisp编程》中的CD录入程序。或许是因为之前学习过其他的编程语言,我现在的编程语言的学习基本上都是在寻找之前已经掌握的编程语言的已知元素。当然,这只是第一步。当这一步过了之后,后面的提升则是针对这个编程语言的一些特性。

         这一次找到的已知元素是C语言中的文件句柄,当然,在我之前学习过的一系列的脚本语言中也有这个元素。或许,拿语法清晰的Python做一个类比更简单吧!

         如果是在Python中,这里涉及到的接口是open,open打开的文件句柄可以拥有不同的属性。比如说,最简单的读或者写。在common lisp中,相应的功能是一个宏,with-open-file。与python的open相似,这个宏打开文件的同时会将文件操作绑定到一个变量上。而打开文件的方式具有不同的属性。而其他语言中提到的句柄这个东西,就是common lisp中with-open-file需要绑定的变量。

         以下是common lisp的代码:

         上面的操作,打开一个文件,设置输出属性。如果文件已经存在,那么进行覆盖。第二个类似句柄的宏with-standard-io-syntax作用于print,将其行为设置为默认。因此,上面的函数功能就是把全局量*db*的信息存储到filename指定的文件中。

         理解了上面的功能,读取基本是一个相反的操作。

         以下是common lisp代码:

         上面代码中,与print相反的是read。其实,这些名字像极了现在的Python了,理解起来还是很容易的。

         接下来,把手头的代码运行效果再测试一下。

         以上操作,录入了3个CD的信息。接下来,将数据存储到数据库文件my_cd.db。

         查看电脑磁盘,会发现一个新写过的文件。如果没有,这个文件会被创建,如果已经存在则会被重写。我直接使用文本工具打开:

         后缀名db是例子里面的,按照理解,这个后缀名应该没有什么太大的关系。我再尝试存储一个txt的文件并打开。

         为了验证读取效果,我先将现在的运行环境重启并重新加载以清除全局量的信息。

         从上面的输出看,现在全局量db中并没有信息。接下来,加载已经存储过的数据库。

         可以看得出加载数据成功,如果现在重新增加一个CD信息,应该可以在原来的基础上继续维护增加下去。这种体验确实是比之前我用过的编程语言方便很多,接下来我如此操作测试一下。

         从测试结果可以看得出,添加成功。接下来,我再把这部分数据信息存盘,写入到原来的txt文件。

         从结果看,数据库的一次“维护”成功。从这个操作流上看,确实是很实用。不过,操作过程中我输入错误导致了一次环境卡死,由于熟悉度不够,没办法进行了重启。看起来,基础的工具还是需要继续熟悉学习的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!