文档章节

Common Lisp菜鸟指南(译)

yyliu
 yyliu
发布于 2012/06/27 22:24
字数 1339
阅读 1851
收藏 14

Common Lisp菜鸟指南(译)

原文见:http://ghostopera.org/blog/2012/06/24/the-newbie-guide-to-common-lisp/

译文自:http://reverland.org/Tech/2012/06/26/common-lisp/

渣翻译,见谅。

进入Common Lisp的世界可能非常让人退缩,甚至对有经验的程序猿也是这样。这个语言兼有力与美,但也有许多清晰的边界和没有真正被普遍理解的开端。

这个指南可能将持续一段时间,但是希望它将使踏入Common Lisp的任务变得不那么可怕。

理解Common Lisp

Ariel Networks 有个适当形式的 Common Lisp 指南。

The HyperSpec 有完整的 Common Lisp 文档。

CLQR 是一个好的课下载的 Common Lisp 快速参考手册。

了解你的工具

Emacs1

Emacs 是一个可实用lisp高度定制的编辑器2。它可以为lisp提供一个非常独特的实时开发流程。查看 David O’Toole 在通过Emacs和他的 “Blocky.io” 游戏开发系统在一个游戏中的 lightning talk ,来查看实时开发实例。很酷不是吗?

Steel Bank Common Lisp

当这世界上有很多可用的 Common Lisp 实现时,"SBCL":sbcl 是非常标准的实现。它很积极的被开发着,有适合的调试器、原生线程、多平台支持。

Quicklisp

Quicklisp 使得从一套丰富的由社区发展的 Common Lisp 库开始变得更容易。它允许你仅仅通过几个简单命令下载、安装和加载任何700多库中的库。它完全取代了它的前任asdf-install,如果你熟悉RubyGems,这非常相似。

CL-Project

CL-Project 是白手起家一个新的 Common Lisp 项目的最佳现代方法。虽然它肯定不是必须的,但是它提供了一个创建新项目的合理起点。

Buildapp

Buildapp 使得创建SBCL的可执行文件更加方便

ASDF

ASDF 允许你定义你的项目的结构和依赖。你可以把它当作Ruby世界中Rake和Gemfile的杂交。

创建你的第一个应用程序

我将把获取Emacs和SBCL的任务留给你自己,你可以找到所有Linux、Windows和MacOS的版本。

安装Quicklisp和SLIME

$ curl -O http://beta.quicklisp.org/quicklisp.lisp$ sbcl --load quicklisp.lisp
This is SBCL 1.0.42.52, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.

  ==== quicklisp quickstart loaded ====     To continue, evaluate: (quicklisp-quickstart:install) 
(quicklisp-quickstart:install) (ql:add-to-init-file) (ql:quickload "quicklisp-slime-helper") 

创建应用程序

载入Emacs并键入 x slime 。你现在应该可以看到REPL——一个交互的lisp提示符。

(ql:quickload "cl-project") (cl-project:make-project #p"myapp"   :author "Your name"   :email "your@email.com"   :license "BSD or whatever") (ql:quickload "myapp") (in-package :myapp) 

现在在Emacs有scratch标签的窗口键入 x cd myapp 紧接着输入 x f src/myapp.lisp 。你应该拥有了一个为准备极棒的编码新建立的myapp.lisp文件。

让我们继续添加一些东西然后试试结果

(defun hello-world ()   (format t "Hello world.~%")) 

现在我们可以把我们的更改注入REPL,通过把光标放到最后一行并键入c c。通过切换到REPL键入以下内容执行我们的新函数:

(hello-world) 

恭喜你!你在通过 Common Lisp 编程

重启Emacs后加载你的应用3

CL-Project 在运行时更改了当前路径,使得第一次加载你的应用很简单。

你有3种方法把应用放到你的加载路径:

  1. 为了让应用在你的当前路径,或者从应用路径启动你的Emacs或者在加载slime之前更改目录。
  1. 把你的应用移动到 ~/quicklisp/local-projects 它将总是有用。
  1. 向你的加载路径添加项目

个人选择对应用选择方法1对库文件选择方法2。

创建可执行文件

虽然做出有用的 Common Lisp 程序不必要创建可执行文件,它却肯定可以方便发布独立的应用。你生成的可执行文件将内嵌整个lisp环境,所以不要因二进制文件的体积感到吃惊……

首先,定义可执行文件的切入点

(export 'main) (defun main (args)   (hello-world)   (cl-user::quit)) 

你将需要下载 buildapp工具 ,指导在它的网站上。

现在从你的myapp目录我们可以在命令行运行buildapp去编译你的程序!

buildapp --asdf-tree $HOME/quicklisp/dists/quicklisp/software \   --load-system myapp --entry myapp:main --output hello

在程序所在目录运行你的程序

$ ./hello
Hello World.

下一步是什么?

实用Common Lisp编程 4很好的介绍Common Lisp的书。是我看的第一本对该语言介绍的书。

Common Lisp the Language,2nd Edition Common Lisp的权威书籍

On Lisp 5提供全面的高级Lisp技术

你应该看看 Land of Lisp 。它非常有趣,会是个相当愉快的阅读。

Footnotes

1 当然可以用vim,vim中slimv正是为此而生,可参考译者的 在Vim中使用lisp 一文。本文中操作都可以在vim中完成,只是不要尝试用那个quicklisp-slime-helper了。

2 Emacs内置elisp解释器。elisp是lisp的一个变种。

3 Vim中类似。

4 有中文版,田春译。

5 有中文版,有兴趣的同学也许可以看看 这里

Changelog

  • 2012年06月27日 星期三 11时03分37秒 更正一些错误。加译作者更新内容

© 著作权归作者所有

共有 人打赏支持
yyliu
粉丝 31
博文 14
码字总数 20045
作品 0
无锡
私信 提问
加载中

评论(1)

LakerLBJ23
LakerLBJ23
有用
Fanta/free-programming-books-zh_CN

免费的编程中文书籍索引 免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版...

Fanta
2016/11/14
0
0
开源电子书

目录 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WEB服务器 版本控制 编辑器 NoSQL PostgreSQL MySQL 管理和监控 项目相关 设计模式 Web 大数据 编程艺术 ...

zting科技
2017/12/11
0
0
免费的编程中文书籍索引

免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 github 上的一个流行的编...

modernizr
2014/04/08
7.3K
24
总有你要的编程书单(GitHub )

目录 IDE IntelliJ IDEA 简体中文专题教程 MySQL 21分钟MySQL入门教程 MySQL索引背后的数据结构及算法原理 NoSQL Disque 使用教程 Neo4j .rb 中文資源 Redis 命令参考 Redis 设计与实现 The ...

汇智网
2017/11/22
0
0
free-programming-books-zh.md

语言无关MySQL NoSQL PostgreSQL Web WEB服务器 其它 函数式概念 分布式系统 在线教育 大数据 操作系统 数据库 智能系统 正则表达式 版本控制 程序员杂谈 管理和监控 编程艺术 编译原理 编辑...

银月光海
2016/05/20
70
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 我敢给你上菜,你敢吃么?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :分享周深的单曲《缘起 (前世今生版)》人间多的是长了两只脚的恶人, 《缘起 (前世今生版)》- 周深 手机党少年们想听歌,请使劲儿...

小小编辑
35分钟前
24
5
万能的Python,还能用来制作高大上的进度条?

对于开发或者运维来说,使用Python去完成一些跑批任务,或者做一些监控事件是非常正常的情况。那么如何有效的监控任务的进度,除了在任务中加上log外,还能不能有另一种方式来了解任务进展到...

上海小胖
54分钟前
8
0
如何嵌入 HTML 到 iPython notebook的输出

如何嵌入 HTML 到 iPython notebook的输出 iPython notebook中可以嵌入 HTML,也适用于JupyterHub和JupyterLab环境。不仅可以显示常用的HTML标签文本,甚至可以嵌入脚本交互操作和Frame分隔框...

openthings
今天
2
0
四、RabbitMQ3.7在CentOS7下的安装

安装依赖 sudo yum install -y gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git 创建yum源 vi /etc/yum.repos.d/rabbitmq-erlang.repo [......

XuePeng77
今天
2
0
android 延长Toast的时长

示例:myToast(5000,"hello"); public void myToast(int showTime, String msg) { Toast hello = Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT); new CountDownTimer(......

雨焰
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部