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

我是一名试图学习Common Lisp的C ++程序员。 我曾经看过一些像Lisp Land这样的书,并且阅读了许多关于Lisp各种美德的在线文章。 不过,我需要一些build议。

几乎我所读到的有关Common Lisp的所有内容都与它的惊人之处有关,它可以让你快速完成任务,以及它如何在30年前用现代编程语言惊人地解决了许多问题。 还有macros是多么惊人,每个编程范例(OO,函数,基于actor或其他等等)都可以在Lisp中使用,以及列表如何成为最终的数据结构。 基本上把Lisp当成一种研究语言来对待,并且说它是多么的不同和革命。

而所有的东西可能是真的,但问题是我没有看到很多东西如何做实际的事情,如读取一个文件,并将其拆分成单词和做一些处理。 为了学习Common Lisp,我不感兴趣学习Common Lisp,但是为了让我用C ++做的事情更快,错误更less,

所以我的问题是什么是最好的资源(是一个网站,书,任何东西), 重点是教如何使用Common Lisp来执行常见的编程任务

  • 如何阅读文件
  • 如何读取文件,replace文件中的单词,然后将结果写回文件
  • 迭代目录中的文件和其他文件系统的东西
  • 与SQL数据库进行交互
  • 通过套接字进行通信
  • 线程的东西像一个networking服务器
  • 创buildGUI
  • 对二进制文件执行操作
  • 编写一个parsing器(不是Lisp的Lisp解释器,据我所知,就像5行Lisp)
  • 与操作系统交互(即用C或C ++编写的东西)来做Lisp本身无法做的事情
  • 如何在C中编写Lisp扩展(可能吗?)
  • embedded一​​个lua解释器(这可能吗?)

另外,在一个不太实际的实例中,如何在lisp中实现常见的数据结构,例如堆,栈,二叉search树等。但是,这可能只是以正确的方式使用Lisp的列表操作,如carcdr 。 我不知道。

我非常怀疑,对于Lisp来说,这是不可能的(除了列表中最后两个例外),否则人们不会那么喜欢它。 而前面提到的东西,我提到了很多使用Lisp编写的真实世界软件(雅虎网上商店)。

但是,在编写一个( )命令式语言之前,我急于使用什么新知识来编写真实世界的应用程序。 那么学习使用Lisp编写实用软件最快捷的方法是什么?

顺便说一下,我看到了Peter Seibel的Practical Common Lisp,但从TOC的angular度来看,它只涉及到我想学Lisp的一些事情。

还有一个问题,如果我可以(对不起,如果这是把两个问题合并为一个),我在哪里可以findLisp的函数和东西的参考?

真的很想喜欢Lisp。

我会build议阅读“ Practical Common Lisp ”,因为它已经回答了你的一些问题。

大概有三到四本书你应该阅读

  • Common Lisp的基本介绍: Common Lisp:象征性计算的简单介绍
  • Common Lisp实用介绍: Practical Common Lisp
  • 更高级的Common Lisp: 人工智能规划范式:Common Lisp案例研究 。 这本书对非AI程序员也很有趣。
  • 很多实用build议: Common Lisp Recipes 。

Common Lisp参考

  • 参考: Common Lisp HyperSpec
  • 可打印的快速参考: Common Lisp快速参考
  • search引擎的文档
  • L1sp.org – redirect服务的文档

手册

下一步你应该检查一下你的Lisp实现的手册。 它描述了很多具体的扩展:networking,线程,…

Common Lisp实现的文档:

  • Allegro Common Lisp
  • CLISP
  • Clozure Common Lisp
  • CMUCL
  • ECL
  • LispWorks
  • SBCL
  • Scieneer Common Lisp

SLIME (基于Emacs的Lisp-IDE)有一个SLIME用户手册 。

Common Lisp库的文档:

  • Quickdocs

图书馆

供图书馆使用

  • Quicklisp : 支持的库 。
  • CLIKI (给出一些概述)

现在看看你的一些观点:

  • 如何阅读文件

请参阅HyperSpec中的文件和stream字典。 具有开放式stream,读取式,读取式,读取式,读取式,读取式,…

  • 如何读取文件,replace文件中的单词,然后将结果写回文件

以上使用。 另见:写和相关。

  • 迭代目录中的文件和其他文件系统的东西

往上看。 目录,path名,…

  • 与SQL数据库进行交互

使用例如CLSQL库。

  • 通过套接字进行通信

请参阅您的Lisp手册或使用其中一个便携式库。 请参阅Quicklisp。

  • 线程的东西像一个networking服务器

请参阅您的Lisp手册或使用其中一个便携式库。 请参阅Quicklisp。

  • 创buildGUI

依靠。 请参阅Quicklisp或实现特定的库。

  • 对二进制文件执行操作

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

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

使用其中一个现有的工具。 研究现有的parsing器。 Lisp中有许多parsing器,但关于这方面的书籍却不多(除了AI文献中描述的自然语言parsing器之外)。

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

依靠。 请参阅Quicklisp或实现特定的库。

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

依靠。 请参阅Quicklisp或实现特定的库。 – > FFI

最终build议:阅读其他作者的代码。

学习其他Lisp代码。 那里有足够多样化的Lisp代码。 从networking服务器到音乐创作软件。

查看Cliki的Common Lisp wiki,它提供了可用于Common Lisp的库列表,它将帮助您完成所有项目。

此外,你会想看看Common Lisp Cookbook (还有一个更新的版本 )。 它具有一堆用于执行常见任务的代码,例如一次读取一行文件 ,以及用于与用C语言编写的库进行交互的外部函数接口 。

你可以用C编写Lisp扩展,具体取决于你使用的是哪个实现。 例如,Emacs-Lisp允许你这样做,尽pipe它不是Common Lisp。 通常你想要做的就是在Common Lisp中编写代码,然后使用不同的Lisp编译器声明或者使用外部函数接口的其他方法尽可能地优化它。

线程依赖于你使用哪个实现,但是我认为他们中的大多数现在都有线程。

Hunchentoot是最好的Lispnetworking服务器之一,并且很容易上手。 您不必自己编写任何线程代码,只需编写HTTP请求处理函数即可。

有人编译了一个Lisp的GUI选项列表 :

  • cl-gtk2,一个GTK GUI库的接口
  • McClim
  • 石榴石
  • 常见的Qt
  • EQL