乐趣区

关于lisp:emacs学习系列-emacs学习lisp

一、参考

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 逻辑运算

退出移动版