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