读完了elisp 感觉很迷茫-_-||

Vim、Emacs配置和使用
回复
maskisland
帖子: 26
注册时间: 2007-08-25 7:42

读完了elisp 感觉很迷茫-_-||

#1

帖子 maskisland » 2007-09-21 23:25

最近花了点时间通读了一下 An Introduction to Emacs Lisp Programming。这个本书上说 emacs lisp 和c++一样是一个正是的语言,可是就它的内容上来说怎么看都是专门为emacs定制的(没有看到有效的输入输出等能力)。难道说elisp 是 common lisp 的阉割版? 有没有办法让这个阉割版重振雄风(我是说能不能让elisp有正常语言的能力,比如从std in 读入数据 std out输出数据 ,或者能显示jpeg什么的,还有连接数据库什么的)?

那位达人能出来解惑一下?
fantong
帖子: 18
注册时间: 2007-09-24 19:33

#2

帖子 fantong » 2007-09-24 20:08

估计你看的书名就是Emacs Lisp Programming啊
pluskid
帖子: 142
注册时间: 2005-11-05 23:18

#3

帖子 pluskid » 2007-10-05 0:38

elisp 本来就是专门为 Emacs 定制的呀。除非像 Pascal 那样的语言,大部分语言的所谓的IO特性都是作为库来提供的,就算是 C 语言,也是一个 C runtime library 来提供输入输出功能,这里 Emacs 好像就是为 Elisp 提供了一个强大的库,所以从理论上来说,也可以为 elisp 添加额外的库来实现你所说的那些功能。
herberteuler
帖子: 45
注册时间: 2007-01-27 14:11

Re: 读完了elisp 感觉很迷茫-_-||

#4

帖子 herberteuler » 2007-10-09 16:26

maskisland 写了:最近花了点时间通读了一下 An Introduction to Emacs Lisp Programming。这个本书上说 emacs lisp 和c++一样是一个正是的语言,可是就它的内容上来说怎么看都是专门为emacs定制的(没有看到有效的输入输出等能力)。难道说elisp 是 common lisp 的阉割版? 有没有办法让这个阉割版重振雄风(我是说能不能让elisp有正常语言的能力,比如从std in 读入数据 std out输出数据 ,或者能显示jpeg什么的,还有连接数据库什么的)?

那位达人能出来解惑一下?
elisp 是有 std in 和 std out 的。举例来说,你可以使用 standard-input 和 standard-output 的值。但是要注意,作为一个实时的交互式编辑器,除非用 noninteractive 方式启动 Emacs,否则 Emacs 会把它们分别绑定到 mini buffer 和 echo area 上。如果用 emacs -batch 方式运行 Emacs,你就可以像其他程序一样从标准输入读入,并从标准输出输出了。试试这个:

代码: 全选

emacs -batch -eval "(print (read standard-input) standard-output)"
有关 elisp 里的输入输出,你可以阅读 elisp 手册的 Read and Print 一节。

像显示 jpeg 或连接数据库这样的功能需要 elisp 直接或者间接地与用 C 写成的函数库通信。通常,Lisp 系统里这样的部分是用 C 写成的。这叫做 Foreign Function Interface (FFI)。就 elisp 来说,打开 jpeg 文件和连接数据库都是有实现的,不过 GNU Emacs 只包含了前者。在 XEmacs 中,elisp 可以与一些数据库后端通信。XEmacs 甚至可以装载动态链接库。

你可以看一下 Emacs 源代码中 src/image.c 里的内容,这是一个用 C 写的 Lisp 接口,提供了对多种图形文件格式的支持(包括 jpeg)。
回复