我为什么要学 Common Lisp

坚强是说给别人听的谎言 提交于 2019-12-07 08:41:27

我喜欢文本处理,以前热衷于使用数据库技术。现在用 Vim 和 Perl。 我可以不假思索的用 Vim 写 Perl 代码。像聊天一样。Perl 语言的所有特性我都熟悉,几乎不用查询帮助文档。 其他语言中关于文本处理,正则表达式的函数和算法,我都比较感兴趣。 拥有不同语法的语言,我也当成一种文本。

我越来越发现,每天处理的大都是语言本身造成的问题。 彼此之间有着语法和文化的鸿沟,互相之间充满了误解。

我决定写一个通用的语言解析算法,可以让不同的语言可以相互转换。

这是一个巨大的挑战,但不管多困难,都是值得的。

第一阶段. 我打算将 BNF 语言描述的语法作为配置文件进行解析,并生成相应的规则。

很快发现,太多的精力放在解析这门语言上,BNF 语系有太多的不同,难道我要用那么多精力,累死在做 BNF 的语言转换器的路上吗?

因为转换 BNF 到数据结构,只是时间上的问题,技术不是问题。何必浪费时间在这上面呢?一定有许多人可以把这个做的很好。

既然解析语言是为了转换成内部数据结构,我为什么不用表示数据结构的语言来做我的配置文件呢?

我决定用数据结构的表示形式来做配置文件。

进度加快了,但又遇到了问题,由于调试的问题,我需要在数据结构中加上暂停和注释的功能.

由于动态规则的问题,我需要对这个数据结构进行动态生成,而我的数据结构没有什么规则可言,不久,关键字和操作符也要加到这门语言当中,我突然意识到,我竟然在设计一门语言?

我曾经发过誓,不再发明什么新的语言,只是转换旧的。怎么违背了当初的誓言呢?

但能解决我问题的语言是什么呢?我列举了几个特性:

  1. 函数是第一类变量,可以传递函数名,动态的调用。
  2. 数据结构是动态生成的,而数据结构本身的字面量表示,就是一门语言。
  3. 配置语言本身就是一门完整的语言。

听闻 Lisp 就是这样的语言,但看看 Lisp 艰深的书籍和各种像机器码一样的程序,就从心里否定了继续研究 Lisp 的想法。

社区里很多人喜欢 Emacs, 时常看他们贴出 Elisp 的代码。这些表示法和 lisp 语言一样像一件古董。Lisp 除了能做 Emacs 的配置语言外,还能做什么呢?

《黑客和画家》改变了我的想法,原来 Lisp 可以做网络商店,而且开发效率那么高?这门语言真的那么神奇,难道 Lisp 真的就是我心里想要的那门语言吗?

通过使用函数和宏不断提高程序的抽象程度,用更精炼和直白的配置语言完成更高层次的开发需求。不管程序多复杂,只要正确的对函数进行命名,细致的设计宏,就能让我的配置文件始终简单易懂。

坚持使用函数编程范式,尽量不用有副作用和依赖全局变量的函数,除了迭代器之外。让系统的每一个组件都是单独可测试的。(迭代器就是做一次列表解析, 绝对没有副作用,是不可能的。)

经过多次的研读 Lisp 的书籍,我现在可以确认,是的,没错。Common Lisp 就是那个能帮助我实现理想的语言。唯有 Common Lisp 能满足我的要求。

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