我是一名C ++程序员,正在尝试学习Common Lisp。我看了一些像Land of Lisp这样的书,并阅读了很多关于Lisp各种优点的在线文章。但是,我需要一些建议。
我所读到的几乎所有关于Common Lisp的内容都与它的惊人之处有多大关系,以及它如何以惊人的速度完成这项工作以及30年前它如何通过现代编程语言解决许多问题。还有多么令人惊奇的宏,以及如何在Lisp中使用每个编程范例(OO,功能,基于actor或其他等),以及列表如何是最终的数据结构。基本上将Lisp视为一种研究语言,并说它有多么不同和革命性。
所有这些东西都可能是真的,但问题是我没有看到很多东西如何做实际的事情,比如读取文件并将其拆分成文字并对其进行一些处理。为了学习Common Lisp,我对学习Common Lisp不感兴趣,但为了让我以前在C ++中做的事情做得更快,错误更少。
所以我的问题是 专注于教授如何使用Common Lisp执行常见编程任务的最佳资源(无论是网站,书籍,任何内容)像
还有一个不那么直接的实用说明,如何在lisp中实现通用数据结构,如堆,堆栈,二叉搜索树等。但是,这可能只是使用Lisp的列表操作,如car
和{ {1}}以正确的方式。我不知道。
我非常怀疑任何这一点(列表中最后两个不太可能例外)对于Lisp来说是不可能的,否则人们就不会那么喜欢它。我读到的上述内容提到了很多用Lisp编写的真实世界软件(想想雅虎网上商店)。
然而,之前使用(?)命令式语言进行编程,我急于使用我所获得的新知识来编写实际应用程序。那么用Lisp学习编写实用软件的最快方法是什么?
顺便说一下,我见过Peter Seibel的 Practical Common Lisp 但是,从TOC来看,它只涉及一些我想要学习的东西使用Lisp来做。
如果可以的话还有一个问题(对不起,如果将两个问题合并为一个),我在哪里可以找到对Lisp函数和东西的引用?
我真的想要喜欢Lisp。
答案 0 :(得分:88)
我建议阅读'Practical Common Lisp',因为它已经回答了你的一些问题。
您应该阅读三到四本书:
Common Lisp参考
<强>手册强>
现在接下来要检查的是Lisp实现的手册。它描述了许多特定的扩展:网络,线程,......
Common Lisp实现的文档:
SLIME(基于Emacs的Lisp-IDE)有一个SLIME User Manual。
Common Lisp库的文档:
<强>库强>
对于图书馆使用
现在看看你的一些观点:
查看HyperSpec中的文件和流词典。 WITH-OPEN-STREAM,READ,READ-LINE,READ-CHAR,READ-BYTE,READ-SEQUENCE,...
以上使用。另见:WRITE和相关。
见上文。 DIRECTORY,路径名,......
使用例如CLSQL库。
请参阅Lisp手册或使用其中一个可移植库。见Quicklisp。
请参阅Lisp手册或使用其中一个可移植库。见Quicklisp。
取决于。请参阅Quicklisp或特定于实施的库。
有关文件和流操作,请参阅Hyperspec。 WRITE-BYTE,READ-BYTE。以二进制流的形式打开流。
使用其中一个现有工具。研究现有的解析器。有许多用Lisp编写的解析器,但在书中没有太多解析(除了AI文献中描述的自然语言解析器)。
取决于。请参阅Quicklisp或特定于实施的库。
取决于。请参阅Quicklisp或特定于实现的库。 - &GT; FFI
最终建议:阅读其他作者的代码。
研究其他Lisp代码。那里有足够多的Lisp代码。从网络服务器到音乐创作软件。
答案 1 :(得分:6)
查看Cliki the Common Lisp wiki它提供了一个可用于Common Lisp的库列表,它将帮助您完成所有项目。
此外,您还要查看the Common Lisp Cookbook(还有updated version更多内容)。它有一堆用于常见任务的代码,例如reading a file one line at a time和Foreign Function Interfaces for interacting with libraries written in C。
您可以在C中编写Lisp扩展,具体取决于您使用的实现。例如,Emacs-Lisp允许你这样做,虽然它不是Common Lisp。通常你要做的是在Common Lisp中编写代码,然后使用不同的Lisp编译器声明或使用外部函数接口的其他方法尽可能地优化它。
线程取决于您使用的实现,但我认为它们中的大多数现在都有线程。
Hunchentoot是最好的Lisp Web服务器之一,很容易上手。您不必自己编写任何线程代码,只需编写HTTP请求处理函数即可。
有人编译a list of GUI options for Lisp: