emacs学习系列: emacs学习lisp

一、参考

Emacs Lisp 简明教程

二、scratch缓存区

进入scratch缓存区,

模式选择 lisp-interaction-mode

(注: 可以通过 m-x lisp-interaction-mode ret 切换模式)

三、小试牛刀

3.1 hello world

image.png

(message "hello world")

3.2 两个执行命令

(1) c-x c-e

执行lisp代码的命令为 c-x c-e, 即函数 eval-last-sexp

函数解释如下:

image.png

执行光标之前的表达式

(2) c-j,即函数 val-print-last-sexp

函数解释如下:

image.png

执行光标之前的表达式,和c-x c-e的不同之处是,执行结果不仅在底部的mini buffer中输出,而且在 current buffer中也会显示

注意: 一次只会解释执行一个表达式

四、函数

4.1 函数定义

image.png

函数由3个部分组成,

(1)函数名称

(2)函数参数列表

(3)函数体

函数体和函数定义之间,可以通过"doc string"添加函数文档

4.2 函数执行

image.png

4.3 注意

注意,

(1) 如果需要执行新定义的函数 hello-world,需要先在函数定义结尾,执行c-x c-e解析执行该新函数,否则会报错

Debugger entered--Lisp error: (void-function hello-world)

(2) 当执行过函数定义后,光标在函数名时候,通过命令 c-h f可以查看该函数的文档

image.png

五、变量

5.1 setq

image.png

可以通过 c-h v查看变量的文档

image.png

5.2 defvar

image.png

defvar声明变量,如果声明的变量已经存在,则不会改变原值

由于lisp中的函数都是全局的,导致setq定义的变量也容易变为全局变量,

如果想要查看变量是否已经存在,可以通过c-h v查看是否已经定义

5.3 let

lisp中可以使用 let指定局部作用域的变量

image.png

这时候,局部变量 pi, area 定义在函数 circle-area中,通过c-h v无法查看变量

5.4 let*

let*let的使用方式相同,唯一区别是:

let*中可以使用之前定义的局部变量

image.png

六、lambda 表达式

image.png

6.1 定义时候直接调用

image.png

6.2 lambda表达式赋值为变量

image.png

七、控制结构

7.1 顺序执行

image.png

7.2 条件判断 if

image.png

7.3 条件判断 cond

image.png

7.4 循环 while

image.png

7.5 逻辑运算

image.png

你可能感兴趣的:(lispemacs)