我刚刚开始学习 Common Lisp——并且很快就爱上了它——而且我刚刚进入了类型系统。我似乎特别喜欢应用程序编程。
据我了解,在 CL 中,字符串和列表都是序列,但似乎没有用于映射序列的任何标准函数,只有列表。我可以看到为什么要为列表提供它们,它们是基本数据类型等等,但为什么它不是设计用于序列?由于它们是一种更通用的类型,因此将应用函数作为目标而不是列表似乎更有用。还是我完全误解了它的工作原理?
编辑:
我感到特别困惑的是,序列——抽象——和列表——实现——似乎在 CL 中被混淆了。共识似乎是这是出于历史原因;lisp 已经存在了很长时间,你几乎可以通过它的函数和宏来规划软件工程实践的发展;乍一看,哪些函数适用于序列,哪些适用于列表似乎是任意的,因为 CL 混合了仅在列表上运行的预序列抽象函数,以及在序列上以更一般的方式执行相同操作的函数。作为目前刚刚学习 CL 的人,我认为如果作者首先引入序列作为更清晰的抽象,然后购买列表作为该抽象的最基本实现,那将会很有用。