我是一名C++程序员,正在努力学习Common Lisp。我看过一些书,如“Lisp的土地”,并阅读了大量关于Lisp各种优点的在线文章。然而,我需要一些建议。
我读到的关于Common Lisp的几乎所有内容都与它有多么令人惊叹,你用它完成工作的速度是多么惊人,以及30年前它是如何惊人地解决了现代编程语言的许多问题有关。此外,宏是多么令人惊叹,以及如何在Lisp中使用每种编程范例(OO、函数式、基于角色或其他),以及列表是如何成为最终的数据结构。基本上把Lisp当作一种研究语言,并说它是多么的不同和革命性。
所有这些东西可能都是真的,但问题是我没有看到太多的东西如何做实际的事情,如读取文件,并将其拆分成单词,并对其进行一些处理。我不是为了学习Common Lisp而学习Common Lisp,而是为了让我以前用C++做的事情做得更快,错误更少。
所以我的问题是,什么是最好的资源(可以是网站,书籍,任何东西),它专注于教授如何使用Common Lisp来完成常见的编程任务,比如
交互
还有一个不那么直接的实用问题,如何在lisp中实现常见的数据结构,如堆、栈、二进制搜索树等。然而,这可能只是以正确的方式使用了Lisp的列表操作,如car
和cdr
。我不知道。
我非常怀疑这一切(除了列表中最后两个不太可能的例外)在Lisp上是不可能的,否则人们不会那么喜欢它。我读到的上述内容提到了很多用Lisp编写的真实软件(Yahoo!我想到了网上商店)。
然而,在(the?)在命令式语言之前,我急于使用我获得的新知识来编写现实世界的应用程序。那么,学习用Lisp编写实用软件的最快方法是什么?
顺便说一下,我看过Peter Seibel的实用Common Lisp,但从TOC来看,它只涉及我想要学习使用Lisp来做的一些事情。
如果可以的话,还有一个问题(如果这是将两个问题合并为一个问题,很抱歉),我在哪里可以找到对Lisp函数和东西的引用?
我真的很想喜欢Lisp。
发布于 2011-08-29 08:13:05
我建议读一下“Practical Common Lisp”,因为它已经回答了你的一些问题。
可能有三到四本书你应该读
Common Lisp基本入门:Common Lisp: A Gentle Introduction to Symbolic Computation
通用Lisp参考
用于documentation的重定向服务参考:Common Lisp HyperSpec
手册
现在,您应该查看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、...
使用上面的。另请参阅:写入和相关。
请参见上面的。目录,路径名,...
进行交互。
例如,使用CLSQL库。
请参阅Lisp的手册或使用一个可移植的库。请参见Quicklisp。
针对for服务器之类内容的
请参阅Lisp的手册或使用一个可移植的库。请参见Quicklisp。
视情况而定。请参阅Quicklisp或特定于实现的库。
有关文件和流操作,请参见Hyperspec。写字节、读字节。将流作为二进制流打开。
为此,请使用现有的工具之一。研究现有的解析器。有许多用Lisp编写的解析器,但在书中并不多见(除了人工智能文献中描述的自然语言解析器)。
中无法完成的任务
视情况而定。请参阅Quicklisp或特定于实现的库。
吗
视情况而定。请参阅Quicklisp或特定于实现的库。-> FFI
最后的建议:阅读其他作者的代码。
学习其他Lisp代码。有足够的、非常多样化的Lisp代码。从web服务器到音乐创作软件。
发布于 2011-08-29 08:16:06
请查看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
GTK gui library
的接口
https://stackoverflow.com/questions/7224823
复制相似问题