关于Elisp
- Lisp方言
- 常用于配置Emacs或者编写Emacs插件
- 其他更多,知道以上两点即可
基本语法初体验
(defun get-name (name)
"Get the name of NAME."
(message "%s" name))
基本特点:
- 函数式编程
- 括号
体验了上面两点之后,我们就直接进入到语言的学习了。
数据类型
布尔类型
- 真,t
- 假,nil
使用判等来体验一下真假。
(eq 1 1) ;; t eq判断是否是相同的对象
(eq 3.1 3.1) ;; nil
(eql 3.1 3.1);; t eql判断是相同或者值相等
(equal 3.1 3.1);; t equal判断是否值相等
(equal "string" "string") ;; t
数字类型
- 整数
- 浮点数
操作符
(+ 2 3)
(- 3 2)
(* 2 3)
(/ 3 2)
(% 3 2)
整数与浮点数转换
- truncate,向0方向取整
- round,四舍五入
- floor,下取整
- ceiling,上取整
类型判断
- integerp
- floatp
- numberp
- zerop
比较
- =
- <
- >
- <=
- >=
- min
- max
字符
- ?A
还有其他的类型,但常见的是这种,够用了。
序列
- 字符串
- 列表
- 数组
以上都被认为是序列。
- sequencep,判断是否是序列
- length,获取序列长度
- elt,获取序列中特定位置的元素
字符串
- 直接使用双引号括起来
- 使用make-string进行初始化
- 使用string进行初始化
- stringp来判断是否是字符串
- string-or-null-p
- char-or-string-p
字符串的比较
- string=
- string<
- string>
字符串的常用函数
- substring,获取子串
- concat,字符串拼接
- split-string,字符串分隔
- format,字符串格式化(%s,%d……)
- * message方法也支持字符串格式化
List列表
这常用的数据类型。
Cons Cell
这个名词一直不太知道该怎么翻译,非空列表?首尾列表?
(cons 1 2) ;; '(1 . 2)
通过以下方法可以进行操作:
- car获取首个元素
- cdr获取剩余的元素列表
- setcar设置首个元素
- setcdr设置剩余元素
常见的列表判断方法
- listp
- consp
alist
类似于从键值对中获取值。举例:
(setq slist '((one . 1)
(two . 2)))
(alist-get 'one slist) ;; 1
plist
与alist类似,但类似于属性取值。举例:
(plist-get '(one 1 two 2) 'one)
逻辑运算符
- and
- or
- not
注意,在Elisp中,只有nil和空list会被认为是nil,其他的所有值都被认为是逻辑真。