“极致清理”─基于Lisp语言对手机、电脑存储空间清理问题的优化提出设想
2022-03-16徐伟伟王易泽晖
徐伟伟 王易泽晖 葛 子
(上海立信会计金融学院 上海 201209)
0 引言
(1)研究背景。我们的手机,电脑总是在使用一段时间后提示内存不足,而内存不足会直接影响手机应用的启动和电脑使用的运行速度。对于这些棘手的问题,我们现在所常用的解决方法有系统自带的内存清理功能、删除一些不常使用的应用或者文件数据、应用商店提供的几款内存清理APP、重购内存更大的设备。现如今我们的硬盘做得越来越大,1TB的存储空间也相继出现在笔记本电脑、平板、手机上。面对内存告急我们真的需要不断去置换更大的存储设备吗?
(2)研究目的。面对内存告急的提示,往往会疑惑自己并没有使用多少存储空间,内存怎么就不够用了。而使用了内存清理功能却发现存储空间的空余空间并没有变大,当自己通过文件管理自行删除的时候又看不懂文件名,并不知道什么类型的文件是可以删除的。本项目便针对该问题从深度清理手机电脑的冗余垃圾、无效数据文件等占用用户存储空间的数据、设计人性化、直观的、可供选择的清理功能、通过针对性强的Lisp语言来实现功能等角度,提出设想。
1 Lisp语言
1.1 Lisp语言简介
LISP语言(LISP,List Processing的缩写)是一种早期开发的、具有重大意义的自由软件项目。它适用于符号处理、自动推理、硬件描述和超大规模集成电路设计等。特点是,使用表结构来表达非数值计算问题,实现技术简单。LISP语言已成为最有影响,使用十分广泛的人工智能语言。
1.2 Lisp语言的特点
(1)主要数据结构是表(符号表达式),而不是作为算术运算对象的数。
(2)特性表简单,便于进行表处理。
(3)最主要的控制结构为递归,适于过程描述和问题求解。
(4)LISP程序内外一致,全部数据均以表形式表示。
(5)能够产生更复杂的函数和解释程序。
(6)对大多数事物的约束发生在尽可能晚的时刻。
(7)数据和过程都可以表示成表使得程序可能构成一个过程并执行这个过程。
(8)大多数LISP系统可以交互方式运行,便于开发各类程序,包括交互程序。
2 提出优化
2.1 以表的形式存储及处理
Lisp语言主要数据结构是表以及符号表达式,符号表达式是以括号为界限的结构区分函数、参数、数据等元素构造的整体。这样的结构方便了编译过程,便于进行表的处理。对于获取到的大量数据我们可以存到一张表里,增强数据的存储逻辑,从而方便我们对数据的处理,简化了处理过程,使得处理逻辑更容易实现,可以为我们的代码块“瘦身”。同时因为表的巨大优势,我们可以更为便捷地对多个应用的数据作批处理,由于应用数据文件具有同质性,在表中按照特征检索可以更快地针对多个软件同时进行索引和清理。所以我们可以设计针对数据特征的检测算法,该算法根据表中存储的数据进行遍历,对后缀名、文件大小、文件类型进行区分提取,分辨是缓存文件、日志文件或是数据文件。因此,我们可以很轻松的为清理软件增加更多的功能,在原有的分类基础上加以细分,增加更多的细节处理。比如:在分类的时候我们可以标注文件的根目录,文件是否已经损坏,删除是否对程序会有影响,或者增加一个最新文件、最旧文件、重复文件、空的文件夹清理的功能,直接跳转到文件位置等等便利的功能,提供给用户更好的使用感。
2.2 递归逻辑调用数据文件
Lisp语言的最主要控制结构为递归。递归是一种特殊的函数调用,是在一个函数中又调用了函数本身,使得Lisp语言设计出的程序更加简洁,更具可读性。本身Lisp语言的特点就是符号化表示数据和函数(S-表达式),基本实现数据的递归定义,函数按照递归算法实现,数据结构更是按照递归定义的,这使得递归逻辑在lisp语言之中是最主要的控制方式。根据我们的研究分析,手机的应用数据存储与缓存的存储存在规律性和辨识性,我们可以通过文件名索引到应用的不同资源位置,而且根据资料表示,空文件夹以及空文件是在应用运行过程中产生的中间性文件即只在应用运行时候才发生作用。软件在每一次用户需要响应的时候都会生成一个日志文件、缓存文件以及中间文件,但是在用户关闭软件的时候,这些文件并不会被删除。对于用户来说这些文件也是属于垃圾文件,日积月累之下则会占据不小的内存空间,所以这就需要采用递归调用的方式,不断调取相应的文件夹,可以将文件夹之间的关系看作图的结构,采用深度优先遍历DFS算法,加上条件判断:直到下一个文件的类型判定不再为文件夹之后,就可以断定这是数据,然后找到这些垃圾文件并予以清除,从而达到底层清理的效果。同时,我们为要处理的数据选择到最合适的数据存储结构(如双向表、二叉树、广义表等),我们也可以轻松地查找到想要的数据。由此延伸,递归模式使得我们可以不断修改、调试、纠错,可以让我们在不断修改和增加用户自定义函数来构成复杂的系统。这样我们可以为一些用户打开一个入口,自定义一个处理过程,这样一来我们就可以为用户增加一个自定义功能。对于我们整理出垃圾文件,冗余文件,缓存等文件时,我们只要对存放数据的表进行查找,不需要再去寻址,是极其便利的,简化了我们的数据清理过程,也极大的提高我们整个数据清理过程的速度。
2.3 数据文件的逐层智能检索
Lisp语言提供的有关符号的特征值和特征表的相应操作,可以方便的实现各种搜索。所以我们可以利用Lisp操作符:quote、atom、eq 进行符号判断,car、cdr、cons操纵表格,cond负责分支判断,来实现定期自动化搜索、智能检索。另外,我们可以加入时间序列的标记,记录文件的创建时间以及最后修改时间,计算时间间隔以及距今时间跨度,通过间隔长短来判断文件的重要程度,一般来说不重要的数据文件的特征都是太久没有访问或者访问的频次过低,我们将其作为基本判定条件进行筛选,然后利用经过训练的重要性判断机制以降序的形式呈现给用户。上述的重要性判别,我们设想采用机器学习的训练模式设计智能判断重要性机制,根据我们采集的不同数据文件的时间间隔以及实际对于用户重要程度的结果输入进行训练,并加入用户习惯以及使用规律进行推断,实现个性化的分析策略,给用户最有效率的清理过程。由于Lisp语言设计的特征值和特征表的相应操作,其实可以理解为给我们提供了一把万能钥匙,利用这把钥匙我们可以打开任何一个存储空间的大门,方便我们实现各种各样的搜索,提供自学习的可能。最后则是针对用户的前端设计,Lisp语言的设计无法可视化,我们以其的特点作为开发的底层逻辑,并通过其他语言呈现给用户更清晰更明了的列表形式,并通过上述算法提供相应分析,进一步帮用户提高数据清理的精确度,使得数据清理的选择项更人性化。
3 总结
我们主要想利用Lisp语言提出以表的形式存储及处理、递归逻辑调用数据文件、数据文件的逐层智能检索这三点基础优化点。希望在根本上去优化现有的垃圾清理软件,也为这些软件提出了一些增加更加人性化的功能的优化点,如增加一个最新文件、最旧文件、重复文件、空的文件夹清理的功能,增加一个自定义功能等。因为Lisp语言是一门自由度很高的语言,它在人工智能领域的应用非常多,作为一门可以灵活调用的实验性语言,这方便了开发者在实验过程中的不断测试修改。不过它依旧存在着一些不足,无法可视化以及对于非开发者的阅读代码不友好是我们将它作为底层逻辑设计的原因,我们希望可以在Lisp的基础上进行研发设计,再通过C++、Java、Python等程序语言结合上述算法结构给实现提供可能性。