在哪里学习如何实际使用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的列表操作,如car
和cdr
。 我不知道。
我非常怀疑,对于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