emacs学习系列: emacs学习lisp

一、参考

Emacs Lisp 简明教程

二、scratch缓存区

进入scratch缓存区,

模式选择 lisp-interaction-mode

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

三、小试牛刀

3.1 hello world

emacs学习系列: emacs学习lisp_第1张图片

(message "hello world")

3.2 两个执行命令

(1) c-x c-e

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

函数解释如下:

emacs学习系列: emacs学习lisp_第2张图片

执行光标之前的表达式

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

函数解释如下:

emacs学习系列: emacs学习lisp_第3张图片

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

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

四、函数

4.1 函数定义

emacs学习系列: emacs学习lisp_第4张图片

函数由3个部分组成,

(1)函数名称

(2)函数参数列表

(3)函数体

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

4.2 函数执行

emacs学习系列: emacs学习lisp_第5张图片

4.3 注意

注意,

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

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

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

emacs学习系列: emacs学习lisp_第6张图片

五、变量

5.1 setq

emacs学习系列: emacs学习lisp_第7张图片

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

emacs学习系列: emacs学习lisp_第8张图片

5.2 defvar

emacs学习系列: emacs学习lisp_第9张图片

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

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

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

5.3 let

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

emacs学习系列: emacs学习lisp_第10张图片

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

5.4 let*

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

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

image.png

六、lambda 表达式

emacs学习系列: emacs学习lisp_第11张图片

6.1 定义时候直接调用

emacs学习系列: emacs学习lisp_第12张图片

6.2 lambda表达式赋值为变量

emacs学习系列: emacs学习lisp_第13张图片

七、控制结构

7.1 顺序执行

emacs学习系列: emacs学习lisp_第14张图片

7.2 条件判断 if

emacs学习系列: emacs学习lisp_第15张图片

7.3 条件判断 cond

emacs学习系列: emacs学习lisp_第16张图片

7.4 循环 while

emacs学习系列: emacs学习lisp_第17张图片

7.5 逻辑运算

emacs学习系列: emacs学习lisp_第18张图片

你可能感兴趣的:(lispemacs)