一、参考
Emacs Lisp 扼要教程
二、scratch 缓存区
进入 scratch
缓存区,
模式抉择 lisp-interaction-mode
(注: 能够通过 m-x lisp-interaction-mode ret
切换模式)
三、小试牛刀
3.1 hello world
(message "hello world")
3.2 两个执行命令
(1) c-x c-e
执行 lisp 代码的命令为 c-x c-e
, 即函数 eval-last-sexp
函数解释如下:
执行光标之前的表达式
(2) c-j
,即函数 val-print-last-sexp
函数解释如下:
执行光标之前的表达式,和 c-x c-e
的不同之处是,执行后果不仅在底部的 mini buffer
中输入,而且在 current buffer
中也会显示
留神: 一次只会解释执行一个表达式
四、函数
4.1 函数定义
函数由 3 个局部组成,
(1)函数名称
(2)函数参数列表
(3)函数体
函数体和函数定义之间,能够通过 "doc string"
增加函数文档
4.2 函数执行
4.3 留神
留神,
(1) 如果须要执行新定义的函数 hello-world
,须要先在函数定义结尾,执行 c-x c-e
解析执行该新函数,否则会报错
Debugger entered--Lisp error: (void-function hello-world)
(2) 当执行过函数定义后,光标在函数名时候,通过命令 c-h f
能够查看该函数的文档
五、变量
5.1 setq
能够通过 c-h v
查看变量的文档
5.2 defvar
defvar
申明变量,如果申明的变量曾经存在,则不会扭转原值
因为 lisp
中的函数都是全局的,导致 setq
定义的变量也容易变为全局变量,
如果想要查看变量是否曾经存在,能够通过 c-h v
查看是否曾经定义
5.3 let
lisp
中能够应用 let
指定部分作用域的变量
这时候,局部变量 pi
, area
定义在函数 circle-area
中,通过 c-h v
无奈查看变量
5.4 let*
let*
和 let
的应用形式雷同,惟一区别是:
let*
中能够应用之前定义的局部变量
六、lambda
表达式
6.1 定义时候间接调用
6.2 lambda
表达式赋值为变量
七、控制结构
7.1 程序执行
7.2 条件判断 if
7.3 条件判断 cond
7.4 循环 while
7.5 逻辑运算