在哪里学习如何实际使用Common Lisp

时间:2011-08-28 23:52:30

标签: lisp common-lisp

我是一名C ++程序员,正在尝试学习Common Lisp。我看了一些像Land of Lisp这样的书,并阅读了很多关于Lisp各种优点的在线文章。但是,我需要一些建议。

我所读到的几乎所有关于Common Lisp的内容都与它的惊人之处有多大关系,以及它如何以惊人的速度完成这项工作以及30年前它如何通过现代编程语言解决许多问题。还有多么令人惊奇的宏,以及如何在Lisp中使用每个编程范例(OO,功能,基于actor或其他等),以及列表如何是最终的数据结构。基本上将Lisp视为一种研究语言,并说它有多么不同和革命性。

所有这些东西都可能是真的,但问题是我没有看到很多东西如何做实际的事情,比如读取文件并将其拆分成文字并对其进行一些处理。为了学习Common Lisp,我对学习Common Lisp不感兴趣,但为了让我以前在C ++中做的事情做得更快,错误更少。

所以我的问题是 专注于教授如何使用Common Lisp执行常见编程任务的最佳资源(无论是网站,书籍,任何内容)

  • 如何阅读文件
  • 如何读取文件,替换文件中的文字,并将结果写回文件
  • 迭代目录和其他文件系统中的文件
  • 与SQL db交互
  • 通过套接字进行通信
  • 为网络服务器之类的东西进行线程处理
  • 创建GUI
  • 对二进制文件执行操作
  • 编写一个解析器(不是Lisp的Lisp解释器,据我所知,就像是5行Lisp)
  • 与操作系统交互(即用C或C ++编写的东西)来做Lisp无法做到的东西
  • 如何在C中编写Lisp扩展(可能吗?)
  • 嵌入lua口译员(可能吗?)

还有一个不那么直接的实用说明,如何在lisp中实现通用数据结构,如堆,堆栈,二叉搜索树等。但是,这可能只是使用Lisp的列表操作,如car和{ {1}}以正确的方式。我不知道。

我非常怀疑任何这一点(列表中最后两个不太可能例外)对于Lisp来说是不可能的,否则人们就不会那么喜欢它。我读到的上述内容提到了很多用Lisp编写的真实世界软件(想想雅虎网上商店)。

然而,之前使用()命令式语言进行编程,我急于使用我所获得的新知识来编写实际应用程序。那么用Lisp学习编写实用软件的最快方法是什么?

顺便说一下,我见过Peter Seibel的 Practical Common Lisp 但是,从TOC来看,它只涉及一些我想要学习的东西使用Lisp来做。

如果可以的话还有一个问题(对不起,如果将两个问题合并为一个),我在哪里可以找到对Lisp函数和东西的引用?

真的想要喜欢Lisp。

2 个答案:

答案 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,路径名,......

  • 与SQL db交互

使用例如CLSQL库。

  • 通过套接字进行通信

请参阅Lisp手册或使用其中一个可移植库。见Quicklisp。

  • 为网络服务器之类的东西进行线程处理

请参阅Lisp手册或使用其中一个可移植库。见Quicklisp。

  • 创建GUI

取决于。请参阅Quicklisp或特定于实施的库。

  • 对二进制文件执行操作

有关文件和流操作,请参阅Hyperspec。 WRITE-BYTE,READ-BYTE。以二进制流的形式打开流。

  • 编写一个解析器(不是Lisp的Lisp解释器,据我所知,就像是5行Lisp)

使用其中一个现有工具。研究现有的解析器。有许多用Lisp编写的解析器,但在书中没有太多解析(除了AI文献中描述的自然语言解析器)。

  • 与操作系统交互(即用C或C ++编写的东西)来做Lisp无法做到的东西

取决于。请参阅Quicklisp或特定于实施的库。

  • 如何在C中编写Lisp扩展(可能吗?)

取决于。请参阅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 timeForeign 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

  • cl-gtk2,GTK gui库的接口
  • McClim
  • 石榴石
  • Common Qt
  • EQL