0%

Elisp Basics (more)

还是几句闲话

刚加了一个大夜班,基本上等于通宵了,从前一天早晨10点一直上班到第二天早晨5点多才下班,在那个时间好像已经感觉不到明显的困意了,不过回到家基本上倒在床上就直接睡着了。睡到中午11点多自然醒了,算一下,这才睡了5个多小时,确实是老了吗?这觉也太少了些吧。

前天晚上写了一段关于Elisp的内容,昨天在家里呆着却迟迟不想接着写下来,不知道这是拖延症发作还是又是懒性大发抑或是这两者合并并生的效果,总之,我对于这种状态极其的不满意,是时候对自己多些管理,要不然都老了。

Emacs Lisp

Elisp Basics里简单写了一些关于Elisp的内容,今天再加一些关于循环、判断的部分,就可以算是Emacs Lisp最基础教程结束了,以后再写类似主题也只会是针对单个需求。

IF THEN ELSE

确切的说本语法分为IF THENIF THEN ELSE两种情况,不细说,看示例。

1
2
3
(if (< 3 4) ; IF
(message "3 is smaller than 4") ; THEN
)
1
2
3
4
(if (> 3 4) ; IF
(message "3 is bigger than 4") ; THEN
(message "4 is bigger than 3") ; ELSE
)

在ELISP中,除了IF函数还有另外两种常用的类似函数,whenunless,其中when与IF的IF THEN用法一样,而unless则相反,看例子

1
2
3
4
5
6
(when (> 3 2) ; 当3大于2时
(message "3 is bigger than 2")
)
(unless (< 3 2) ; 当3不小于2时
(message "3 is bigger than 2")
)

Iteration

到目前为止,我知道的ELISP的循环函数只有while

1
2
3
4
5
(setq x 0)
(while (< x 10)
(message "hello %d" x)
(setq x (1+ x))
)

在这里还有一个需要考虑的问题,在很多时候,我们需要在循环运行的过程中主动退出循环,在其它语言中,我们有类似于break之类的语法,而ELISP是没有的,那应该怎么办哪?有限循环的过程是由条件控制的,当条件满足,则循环继续,否则,循环退出,那么,我们可以这样。

1
2
3
4
5
6
(setq x 0)
(while (< x 10)
(message "hello %d" x)
(when (= x 3) (setq x 10)) ; 在此处直接把x改为不满足循环条件,那么当前循环执行完整个循环也就结束了
(setq x (1+ x))
)

或者,为了让程序更干净一些,我们加一个专门用于控制循环的变量,如下

1
2
3
4
5
6
7
8
9
(setq x 0)
(setq found nil)
(while (and (< x 10) (not found))
(message "hello %d" x)
(when (= x 3) ; 达到特定情况,则把found设置为t,当前循环完成,则结束整个循环
(setq found t)
)
(setq x (1+ x))
)

函数定义

关于函数定义就说一点最简单的,毕竟这篇文章只准备说点基础

1
2
3
4
5
(defun my-function () ; defun 函数名 参数列表
"string document" ; 函数说明
(interactive) ; 可交互使用的函数
(message "hello defun")
)

就说这点吧,关于函数的定义,在使用的过程中可以再多写一些。

结束

感觉身体状态很差,头很容易不舒服,身体也更容易感觉累,睡眠质量也不行,等忙过这几天要去做一次体检了,看看哪里出了问题。

最近几个月的业余时间我感觉都给浪费了,没有认真做点事学些东西的心境,需要调整一下了。

Welcome to my other publishing channels