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

New*_*per 78 lisp common-lisp

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

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

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

所以我的问题是什么是最好的资源(无论是网站,书籍,什么),专注于教授如何使用Common Lisp来完成常见的编程任务,

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

而且也不太实际,立即注意到,如何实现LISP常用的数据结构,如堆,栈,二叉搜索树等,但可以使用像Lisp的列表操作是公正carcdr正确的方式.我不知道.

我非常怀疑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和相关.

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

往上看.目录,路径名,......

  • 与SQL数据库交互

例如,使用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或特定于实现的库. - > FFI

最后建议:阅读其他作者的代码.

研究其他Lisp代码.那里有足够多的Lisp代码.从Web服务器到音乐合成软件.

  • @NewLisper:有很多可移植性库.见Quicklisp. (4认同)
  • @NewLisper:即使你对AI不感兴趣,你也应该阅读一些文献,因为它描述了Lisp被发明的'符号编程'方法. (4认同)
  • 好像很多东西都是特定于实现的.是否有类似C的东西不是_implementation_特定的但是_operating system_ specific?似乎让每个想要你的代码的人都使用你选择的实现是不可行的.我对AI也不是很感兴趣. (2认同)
  • @NewLisper:这是一个非常完整的答案.Lisp与OS和C/C++调用的关系更接近Python.据说将FFI(外部函数接口)放在一起非常简单.值得注意的是,似乎网络上Common Lisp用户的优势似乎是在使用SBCL. (2认同)
  • 我会添加一些具体的库:socket:usocket; 网络服务器:hunchentoot; 穿线:波尔多线,通道; 操作系统交互/链接C-stuff:CFFI,UFFI. (2认同)
  • 埃德蒙·韦茨(Edmund Weitz)的"Common Lisp Recipes"一书听起来可能正是原始海报所寻求的.http://weitz.de/cl-recipes/ (2认同)

Rud*_*lah 6

查看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选项列表:

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