Lisp入门

2020-12-21 19:06:26

在HackerNews,2019年和Lisp的故事火爆。虽然存在多种Lisp方言,但Common Lisp是最古老和最受关注的方言。因此,如果您希望开始使用Common Lisp进行编程,那么有两种选择:

使用roswell安装多个Lisp实现+构建并捆绑Lisp应用程序。 Roswell默认情况下会安装SBCL。

对于我来说,我不想仅仅为了开始使用Lisp而学习全新的文本编辑器,所以我选择了罗斯韦尔。请遵循有关为您的平台安装Roswell的说明。就我而言,我决定通过以下方式将其安装在Linux计算机上的$ HOME / bin下:

$ sudo apt install rlwrap $ mkdir $ HOME / bin $ git clone -b版本https://github.com/roswell/roswell.git$ cd roswell / $ sh bootstrap $ ./configure --prefix = $ HOME / bin $ make $安装

确保将roswell路径添加到您的〜/ .bashrc中(请注意,roswell会将其自身安装在〜/ bin / bin下,如果您觉得很奇怪,请将其安装在$ HOME / apps或类似的文件下):

现在,我们将设置VSCode来运行lisp。首先安装vscode-lisp扩展。打开一个新文件,并在其中键入以下内容:

然后在VSCode内部启动一个终端。在终端运行rlwrap ros run以启动REPL(读取/评估/打印循环)。选择上面定义的功能,然后使用“在活动终端中运行所选文本”。从命令面板(F1)运行您的代码!请注意,您可以通过以下方式退出REPL:(SB-EXT:EXIT)。 rlwrap实用程序会记住以前键入的命令,这会使REPL体验更好。

Roswell的惊人之处在于它具有脚本/构建功能,可让您轻松分发应用程序。要查看实际情况,请首先通过ros init hello-world创建roswell脚本。然后添加以下代码,以使您的脚本如下所示:

#!/ bin / sh#|-*-mode:lisp-*-| ## | exec ros -Q-$ 0" $ @" |#(progn ;; init form(ros:ensure -asdf);;#+ quicklisp(ql:quickload'():silent t))(defpackage:ros.script.hello-world.3774807541(:use:cl))(包装内:ros.script .hello-world.3774807541)(defun helloWorld()(格式t" Hello world"))(defun main(& rest argv)(declare(ignorable argv))(helloWorld));;; vim:设置ft = lisp lisp:

现在,我们可以简单地通过ros hello-world.ros运行此脚本,但更有趣的是,我们实际上可以通过ros build hello-world.ros&&编译二进制文件。 。/你好,世界。

有趣的是,我不是Common Lisp的完全菜鸟,实际上我是在15年前的本科课程中对其进行编程的。我和一位同事在寻路问题上将实验遗传算法与蚁群优化算法进行了比较。一旦运行了Lisp,我就打开了项目,并在REPL中基本执行了ants.lisp,先运行了(INITIALIZE-ANT-WORLD),然后运行了(DISPATCH-ANTS)和voila,我的蚂蚁可以找到他们的食物了!

没有进一步阅读的清单,没有任何新的Lisp入门指南将不完整,这将使您在接下来的100年里都很忙,因此,我们开始:

通向Lisp的道路-Steve Losh的入门指南。以下是该帖子中有用的信息的一小段:系统是代码的集合,有关如何加载该代码的说明,依赖项列表和元数据。它们与包装正交。

项目是" stuff"的高级集合。例如代码,文档,也许还有一些图像资产等。它们(大部分)与系统正交。

该指南还对库进行了很好的回顾,绝对值得一读。 推荐罗斯威尔的另一篇文章,并提供有关Atom集成以及项目和库管理的说明。 好吧,就是这样-Lisp很漂亮,我想把我的头缠在大约15年的看起来不太糟糕的代码上,那就去函数式编程吧!